{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"gpuType":"A100","authorship_tag":"ABX9TyN0kN6cLcJza6bS2haraWkP"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"},"accelerator":"GPU"},"cells":[{"cell_type":"markdown","source":["官方数据集下载\n","（所有外部数据集通过wget导入在本模块导入，在其他部分导入可能导致失去成绩）"],"metadata":{"id":"Q4mGdYdgi1z8"}},{"cell_type":"code","execution_count":1,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"YJc4ptkAQ8E5","executionInfo":{"status":"ok","timestamp":1726138630175,"user_tz":-480,"elapsed":23904,"user":{"displayName":"王宇哲","userId":"05854028536713312921"}},"outputId":"fd7f9eca-2871-4c44-f8b8-0c734bad4225"},"outputs":[{"output_type":"stream","name":"stdout","text":["--2024-09-12 10:56:42--  https://drive.usercontent.google.com/download?id=1Y0ejShdcx6YiaE3jJ0yxcOTKxirR-MAh&export=download&authuser=0&confirm=t&uuid=90e67168-c423-4396-a7ac-4cfcb1f2cc01&at=APZUnTXTP3YsMMcYVNsvI5-B_UtN:1720979862404\n","Resolving drive.usercontent.google.com (drive.usercontent.google.com)... 142.250.141.132, 2607:f8b0:4023:c0b::84\n","Connecting to drive.usercontent.google.com (drive.usercontent.google.com)|142.250.141.132|:443... connected.\n","HTTP request sent, awaiting response... 200 OK\n","Length: 1089154958 (1.0G) [application/octet-stream]\n","Saving to: ‘CIKM_Training.zip’\n","\n","CIKM_Training.zip   100%[===================>]   1.01G  64.9MB/s    in 21s     \n","\n","2024-09-12 10:57:06 (48.9 MB/s) - ‘CIKM_Training.zip’ saved [1089154958/1089154958]\n","\n"]}],"source":["!wget --header=\"Host: drive.usercontent.google.com\" --header=\"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36\" --header=\"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\" --header=\"Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\" --header=\"Cookie: __Secure-ENID=12.SE=Yd0Bj-CLJ14fnd4qzdJHmwUs4B5zz46UaPC1cPJigNqqFV9PtM2CYyBpSbCkOyzUwzlEdZ1nZFf-igtGi7wSdJ_gqQSfQfh84r9egqFQAy9-GKayCRbdQKdera-2mkpuIT-c64CyR9vfNojM3hxZ9Dej-dGvtxlGjal9ttEHybw; __gsas=ID=ae0421b9a34b478c:T=1710758437:RT=1710758437:S=ALNI_MZP13R9ZOHbCzC0rgHSMrGXj6GCsg; SEARCH_SAMESITE=CgQI35oB; SID=g.a000lgiBaVVDJxM_nyJHv8SGKdW8l-Ea7eoYBmsE1puBGqeYmuoUD3CsQuje5kFlDuyAjS6tbwACgYKAewSARQSFQHGX2MiQwM3sBqt9QySR0B5yipflRoVAUF8yKo6yV91BccjS1Z6o32Ux6ew0076; __Secure-1PSID=g.a000lgiBaVVDJxM_nyJHv8SGKdW8l-Ea7eoYBmsE1puBGqeYmuoUdkz-2WaNotDz3XhWHdZaewACgYKAdMSARQSFQHGX2Mi2DyEcyhQnLt_3xtpRFnETBoVAUF8yKoObySYGWwftPorBYI_hdIh0076; __Secure-3PSID=g.a000lgiBaVVDJxM_nyJHv8SGKdW8l-Ea7eoYBmsE1puBGqeYmuoUMoY9B1xAja7hD33yfC_l8gACgYKAXESARQSFQHGX2Miy7Eh3rWIzqh1GS_d-315mhoVAUF8yKpBtafXePsFsQwbeu_1xhEZ0076; HSID=AqK8DRIVZrNtHDQEM; SSID=AF8GbXclnoQKbndEK; APISID=eaYPuocswpo7W9-H/AOCjbMPSZJ096e5h4; SAPISID=xTIl5TE60VtPYf3j/A-54gZvfpsOMhgwjL; __Secure-1PAPISID=xTIl5TE60VtPYf3j/A-54gZvfpsOMhgwjL; __Secure-3PAPISID=xTIl5TE60VtPYf3j/A-54gZvfpsOMhgwjL; NID=515=plru-gK0AjVf1Sy8SC5LvpAocQ8efRsdx0CZ1kdvR10iJMaeT-fsU6T5AyKgdFpWE-kImnEI5utU-487cxMnVkrz0_-aB-3blUbOI1wu31UI-2dAjxd2LWGEgubs2zJi8cjE8hfCzP-TgVqkwzSNkE6riAOmKvZvkdSWWgnwFiQLxr3X7et1TNvcPZvpEHzG8iqoylaY55lZje6L4CmiT0b8N2PzagLdpOZdUGkWyRJDlTsAeSnlvMM5M8ZTWjZm7UvVNqMRBh-CA4KJ-BkCavo-Pt0F4-3-qSceoZ3nNz6AUfFk_2J9dWLmijh23NbSZsQP4z2u7O2WDMwTmntI1Qc5QiIuXjxGDLDz6GQPSEMIyWZCRTsNxZtmNlKQROEsPwKKMmmylxBjRXLFtSKyLitb6oDPhkp8YbUh984lDVAuZkAOcjAuCgYFdAEmNyGGrWWFPmdaUAUZ-uxIL8lClSnbNx0zECu88QhO-QtallWvKzDYr3ZK7czaeJi2nQX53eUWfJM0eyOeeric1Ltf1wA1_w0zXPaBF5rPBONe7Rzm5phafNrSAl9XpofCiBT_B4mmb81hfFlGrBI3_4Rtj7UohFGwMaKcrIyPLBok4nQogBBPAzhPsnNFLJgBOUqQLAMDIoup982yf7v8ISeApMkZdgQ; __Secure-1PSIDTS=sidts-CjEB4E2dkZiFPZveD2L67T0j-mwN6ErulV1FpkkkhAlfHtcpBwyaLEFAl9KPDrhmId99EAA; __Secure-3PSIDTS=sidts-CjEB4E2dkZiFPZveD2L67T0j-mwN6ErulV1FpkkkhAlfHtcpBwyaLEFAl9KPDrhmId99EAA; SIDCC=AKEyXzURbTd6qCpA02QoGXCORelVic8I05vY0Fudj1oUukq6szKRAuO4mcverQ_TFNKg0pPsF-tiZg; __Secure-1PSIDCC=AKEyXzVPd347dt-7_3JSjQc3gmzPqwRtmRgaQpuVqN0qtN34VORpmjxOBVKFZsXxU0m0JibWfONm; __Secure-3PSIDCC=AKEyXzWa_JoS5Duud9ECYjQhLb8ENX9_ML6X5YK4El1eSaET9Cq21vXwSW53TCFtQ0e-KwYt3BEK\" --header=\"Connection: keep-alive\" \"https://drive.usercontent.google.com/download?id=1Y0ejShdcx6YiaE3jJ0yxcOTKxirR-MAh&export=download&authuser=0&confirm=t&uuid=90e67168-c423-4396-a7ac-4cfcb1f2cc01&at=APZUnTXTP3YsMMcYVNsvI5-B_UtN:1720979862404\" -c -O 'CIKM_Training.zip'"]},{"cell_type":"code","source":["!wget --header=\"Host: drive.usercontent.google.com\" --header=\"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36\" --header=\"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\" --header=\"Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\" --header=\"Cookie: __Secure-ENID=12.SE=Yd0Bj-CLJ14fnd4qzdJHmwUs4B5zz46UaPC1cPJigNqqFV9PtM2CYyBpSbCkOyzUwzlEdZ1nZFf-igtGi7wSdJ_gqQSfQfh84r9egqFQAy9-GKayCRbdQKdera-2mkpuIT-c64CyR9vfNojM3hxZ9Dej-dGvtxlGjal9ttEHybw; __gsas=ID=ae0421b9a34b478c:T=1710758437:RT=1710758437:S=ALNI_MZP13R9ZOHbCzC0rgHSMrGXj6GCsg; SEARCH_SAMESITE=CgQI35oB; SID=g.a000lgiBaVVDJxM_nyJHv8SGKdW8l-Ea7eoYBmsE1puBGqeYmuoUD3CsQuje5kFlDuyAjS6tbwACgYKAewSARQSFQHGX2MiQwM3sBqt9QySR0B5yipflRoVAUF8yKo6yV91BccjS1Z6o32Ux6ew0076; __Secure-1PSID=g.a000lgiBaVVDJxM_nyJHv8SGKdW8l-Ea7eoYBmsE1puBGqeYmuoUdkz-2WaNotDz3XhWHdZaewACgYKAdMSARQSFQHGX2Mi2DyEcyhQnLt_3xtpRFnETBoVAUF8yKoObySYGWwftPorBYI_hdIh0076; __Secure-3PSID=g.a000lgiBaVVDJxM_nyJHv8SGKdW8l-Ea7eoYBmsE1puBGqeYmuoUMoY9B1xAja7hD33yfC_l8gACgYKAXESARQSFQHGX2Miy7Eh3rWIzqh1GS_d-315mhoVAUF8yKpBtafXePsFsQwbeu_1xhEZ0076; HSID=AqK8DRIVZrNtHDQEM; SSID=AF8GbXclnoQKbndEK; APISID=eaYPuocswpo7W9-H/AOCjbMPSZJ096e5h4; SAPISID=xTIl5TE60VtPYf3j/A-54gZvfpsOMhgwjL; __Secure-1PAPISID=xTIl5TE60VtPYf3j/A-54gZvfpsOMhgwjL; __Secure-3PAPISID=xTIl5TE60VtPYf3j/A-54gZvfpsOMhgwjL; NID=515=plru-gK0AjVf1Sy8SC5LvpAocQ8efRsdx0CZ1kdvR10iJMaeT-fsU6T5AyKgdFpWE-kImnEI5utU-487cxMnVkrz0_-aB-3blUbOI1wu31UI-2dAjxd2LWGEgubs2zJi8cjE8hfCzP-TgVqkwzSNkE6riAOmKvZvkdSWWgnwFiQLxr3X7et1TNvcPZvpEHzG8iqoylaY55lZje6L4CmiT0b8N2PzagLdpOZdUGkWyRJDlTsAeSnlvMM5M8ZTWjZm7UvVNqMRBh-CA4KJ-BkCavo-Pt0F4-3-qSceoZ3nNz6AUfFk_2J9dWLmijh23NbSZsQP4z2u7O2WDMwTmntI1Qc5QiIuXjxGDLDz6GQPSEMIyWZCRTsNxZtmNlKQROEsPwKKMmmylxBjRXLFtSKyLitb6oDPhkp8YbUh984lDVAuZkAOcjAuCgYFdAEmNyGGrWWFPmdaUAUZ-uxIL8lClSnbNx0zECu88QhO-QtallWvKzDYr3ZK7czaeJi2nQX53eUWfJM0eyOeeric1Ltf1wA1_w0zXPaBF5rPBONe7Rzm5phafNrSAl9XpofCiBT_B4mmb81hfFlGrBI3_4Rtj7UohFGwMaKcrIyPLBok4nQogBBPAzhPsnNFLJgBOUqQLAMDIoup982yf7v8ISeApMkZdgQ; __Secure-1PSIDTS=sidts-CjEB4E2dkZiFPZveD2L67T0j-mwN6ErulV1FpkkkhAlfHtcpBwyaLEFAl9KPDrhmId99EAA; __Secure-3PSIDTS=sidts-CjEB4E2dkZiFPZveD2L67T0j-mwN6ErulV1FpkkkhAlfHtcpBwyaLEFAl9KPDrhmId99EAA; SIDCC=AKEyXzV9L2DyLa7cOj7QEH5jq731oO3bjUfxB9xunhlp0aLuj_Yrks1puUhcLsZ8rELAfcHJjDmdqg; __Secure-1PSIDCC=AKEyXzUqTJxy1COupBctW9fNufvYQ4ZxCVzD4btsqLhg-i8UKiKC1jI3mI_5nliA_a0z-FM7PD0I; __Secure-3PSIDCC=AKEyXzU45-0-sVl11D0Mg7O6UieJpansLMEGJeXrmWGqtoNEtTeyHkgewKyRGMZVmJHm49Bzj1IM\" --header=\"Connection: keep-alive\" \"https://drive.usercontent.google.com/download?id=17M0nVsBdeiZxMnFVhKMuq89APc9pbA91&export=download&authuser=0&confirm=t&uuid=de518810-0b86-44da-9924-b3044aedae65&at=APZUnTWx_R5StqP3iGT6U7FBhIm-:1720979898499\" -c -O 'CIKM_Test.zip'"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"FxPsrm10xr6H","executionInfo":{"status":"ok","timestamp":1726138718020,"user_tz":-480,"elapsed":6121,"user":{"displayName":"王宇哲","userId":"05854028536713312921"}},"outputId":"dccd6625-cef0-42ce-f6e7-e2f0dc3103ff"},"execution_count":2,"outputs":[{"output_type":"stream","name":"stdout","text":["--2024-09-12 10:58:28--  https://drive.usercontent.google.com/download?id=17M0nVsBdeiZxMnFVhKMuq89APc9pbA91&export=download&authuser=0&confirm=t&uuid=de518810-0b86-44da-9924-b3044aedae65&at=APZUnTWx_R5StqP3iGT6U7FBhIm-:1720979898499\n","Resolving drive.usercontent.google.com (drive.usercontent.google.com)... 142.250.141.132, 2607:f8b0:4023:c0b::84\n","Connecting to drive.usercontent.google.com (drive.usercontent.google.com)|142.250.141.132|:443... connected.\n","HTTP request sent, awaiting response... 200 OK\n","Length: 94200676 (90M) [application/octet-stream]\n","Saving to: ‘CIKM_Test.zip’\n","\n","CIKM_Test.zip       100%[===================>]  89.84M  23.7MB/s    in 3.8s    \n","\n","2024-09-12 10:58:34 (23.7 MB/s) - ‘CIKM_Test.zip’ saved [94200676/94200676]\n","\n"]}]},{"cell_type":"code","source":["!wget --no-check-certificate \"https://docs.google.com/uc?export=download&id=1XCnOhErU43miZOVJkTfVX8eSjTO43nMN\" -O 'dataset2_train_label.csv'\n","!wget --header=\"Host: drive.usercontent.google.com\" --header=\"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\" --header=\"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\" --header=\"Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\" --header=\"Cookie: HSID=ATwRmTKlHP_RpnHXT; SSID=AS31Tow2HJcBiLgNy; APISID=SX5B90Vpb0IUe6YZ/ATOdwFJZf9KStgqhS; SAPISID=JCXbHBhKRIMeNooO/A_TvqIBzTpSn9Kx-i; __Secure-1PAPISID=JCXbHBhKRIMeNooO/A_TvqIBzTpSn9Kx-i; __Secure-3PAPISID=JCXbHBhKRIMeNooO/A_TvqIBzTpSn9Kx-i; SEARCH_SAMESITE=CgQI2ZsB; SID=g.a000nwjHxU5fCmKoInEJm9ZuvMJKDCpdMMrUtBX2OJwYdOfO8DcRNoLBBDW65YmcjKdPrQcjkgACgYKAT4SARcSFQHGX2Mif6xKy5_B5Tna1GvjcDHQRhoVAUF8yKoArM5BHMgrir18aPRpHjc-0076; __Secure-1PSID=g.a000nwjHxU5fCmKoInEJm9ZuvMJKDCpdMMrUtBX2OJwYdOfO8DcRuJgO0VuSbh1GPFYSdmDCzgACgYKAd0SARcSFQHGX2MiLJl2Jb7BUtFtcglAlIoY3hoVAUF8yKq3TRbH_CwTBnTJvXhfMFt00076; __Secure-3PSID=g.a000nwjHxU5fCmKoInEJm9ZuvMJKDCpdMMrUtBX2OJwYdOfO8DcRWkn1RoUv2flYnNeOW1u90wACgYKAY8SARcSFQHGX2MihtLTaB69r8UrQtoEGjxR2xoVAUF8yKooEtVfT60JQv3_aEgYjIvf0076; AEC=AVYB7crJ1G4HbzOOvc3WUNSqwwmvQ7sFybq9cOIZ_DscMH17vk_AzL9meKE; NID=517=OQBnIfQjpg505sLXAjZcj44dyQ17oyNQGS3gDIFRBHhrAU9GY3Wt7rnQDOXM6-4zDbunJYTcCSVPRUnP2G2oKr4mVzWziwgvwiPGv9sklHbO9XN5wCtcGiTZ9L2wAWygldwMPvp6_DG3Zvyl9dekhS2WnUi8OM866NBv0raLxhVTc7XPSePr3bsgkbcU67PfDMOm0TPoS_1iv3i4ihh6YUyU5ZVXXOdjMII_KYMD7DT4FYb9ed-153vC5sgqxcuECQ3heBM-8ma3O9aGMudAsswdoFbcKldg6JvdhDFG4Y7j_13Fx4FedWNBlSwl2jcEWxNVMZvorCkCzNIPqaH2a4aQeo0okr1DpRTlJRnVeFgFZ6wVcE7faXTT3grUeNBLVbvoE9vBbfPccmXU1SUnybQMYcw1sgO00sL-iaaEwcgwqVH2G_ICo9Vej8YEwbpqjrl-xIoBrw; __Secure-1PSIDTS=sidts-CjEBUFGoh9SpMj5YANNFT1aioai2PUloDOzI-VkR0WJ7RnE_LPraNUNF1Jhhc2FpL3HdEAA; __Secure-3PSIDTS=sidts-CjEBUFGoh9SpMj5YANNFT1aioai2PUloDOzI-VkR0WJ7RnE_LPraNUNF1Jhhc2FpL3HdEAA; SIDCC=AKEyXzXo1zfJh91KUb_OP2lCcW4dIPT5odPXPqSFzFSIBL2ZtLHwVgRETGXkztx8MqxxoqPac0Ez; __Secure-1PSIDCC=AKEyXzVZAkBeMNS40SBomi0nDd1TRKG7aAvccVvfzzpgUAjo3OBUgpDGJ8NogGdG_nshgRpYCkf-; __Secure-3PSIDCC=AKEyXzXr1e7JI51-Caew-es2WgJzzy_1iZp60_ROjKb5jK0dhZYs_cLUQUOEOn_dk5qjyKKoQnpf\" --header=\"Connection: keep-alive\" \"https://drive.usercontent.google.com/download?id=1R2avsINxJM3_YedYyVyhuGO09FBnWJhJ&export=download&authuser=1&confirm=t&uuid=0b0398c8-5bc6-4b5f-bc15-94ec902e7fa4&at=AO7h07drCrJtdimQRt3hvLK4-VoT:1726128357133\" -c -O 'Dataset_2_Feature.zip'"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"QPXsSFodBInU","executionInfo":{"status":"ok","timestamp":1726138741615,"user_tz":-480,"elapsed":21170,"user":{"displayName":"王宇哲","userId":"05854028536713312921"}},"outputId":"64bc2af2-837d-49da-e2d0-4575676b0c72"},"execution_count":3,"outputs":[{"output_type":"stream","name":"stdout","text":["--2024-09-12 10:58:36--  https://docs.google.com/uc?export=download&id=1XCnOhErU43miZOVJkTfVX8eSjTO43nMN\n","Resolving docs.google.com (docs.google.com)... 142.251.2.138, 142.251.2.102, 142.251.2.139, ...\n","Connecting to docs.google.com (docs.google.com)|142.251.2.138|:443... connected.\n","HTTP request sent, awaiting response... 303 See Other\n","Location: https://drive.usercontent.google.com/download?id=1XCnOhErU43miZOVJkTfVX8eSjTO43nMN&export=download [following]\n","--2024-09-12 10:58:36--  https://drive.usercontent.google.com/download?id=1XCnOhErU43miZOVJkTfVX8eSjTO43nMN&export=download\n","Resolving drive.usercontent.google.com (drive.usercontent.google.com)... 142.250.141.132, 2607:f8b0:4023:c0b::84\n","Connecting to drive.usercontent.google.com (drive.usercontent.google.com)|142.250.141.132|:443... connected.\n","HTTP request sent, awaiting response... 200 OK\n","Length: 27830 (27K) [application/octet-stream]\n","Saving to: ‘dataset2_train_label.csv’\n","\n","dataset2_train_labe 100%[===================>]  27.18K  --.-KB/s    in 0.003s  \n","\n","2024-09-12 10:58:39 (9.53 MB/s) - ‘dataset2_train_label.csv’ saved [27830/27830]\n","\n","--2024-09-12 10:58:39--  https://drive.usercontent.google.com/download?id=1R2avsINxJM3_YedYyVyhuGO09FBnWJhJ&export=download&authuser=1&confirm=t&uuid=0b0398c8-5bc6-4b5f-bc15-94ec902e7fa4&at=AO7h07drCrJtdimQRt3hvLK4-VoT:1726128357133\n","Resolving drive.usercontent.google.com (drive.usercontent.google.com)... 142.250.141.132, 2607:f8b0:4023:c0b::84\n","Connecting to drive.usercontent.google.com (drive.usercontent.google.com)|142.250.141.132|:443... connected.\n","HTTP request sent, awaiting response... 200 OK\n","Length: 588580746 (561M) [application/octet-stream]\n","Saving to: ‘Dataset_2_Feature.zip’\n","\n","Dataset_2_Feature.z 100%[===================>] 561.31M  48.9MB/s    in 16s     \n","\n","2024-09-12 10:58:57 (35.3 MB/s) - ‘Dataset_2_Feature.zip’ saved [588580746/588580746]\n","\n"]}]},{"cell_type":"code","source":["!unzip -q CIKM_Training.zip\n","!unzip -q CIKM_Test.zip\n","!unzip -q Dataset_2_Feature.zip"],"metadata":{"id":"hEPlKo90xu0W","executionInfo":{"status":"ok","timestamp":1726138845843,"user_tz":-480,"elapsed":53538,"user":{"displayName":"王宇哲","userId":"05854028536713312921"}}},"execution_count":4,"outputs":[]},{"cell_type":"markdown","source":["# 常见工具安装与导入\n","（所有外部代码和包需要在本模块导入）"],"metadata":{"id":"TkvqyJmpxx6I"}},{"cell_type":"code","source":["!pip install open3d\n","!pip install vtk"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"8glt9e--xyhK","executionInfo":{"status":"ok","timestamp":1726138960961,"user_tz":-480,"elapsed":29963,"user":{"displayName":"王宇哲","userId":"05854028536713312921"}},"outputId":"6a687dfb-7b36-480a-dc00-3bba6f633f9d"},"execution_count":5,"outputs":[{"output_type":"stream","name":"stdout","text":["Collecting open3d\n","  Downloading open3d-0.18.0-cp310-cp310-manylinux_2_27_x86_64.whl.metadata (4.2 kB)\n","Requirement already satisfied: numpy>=1.18.0 in /usr/local/lib/python3.10/dist-packages (from open3d) (1.26.4)\n","Collecting dash>=2.6.0 (from open3d)\n","  Downloading dash-2.18.0-py3-none-any.whl.metadata (10 kB)\n","Requirement already satisfied: werkzeug>=2.2.3 in /usr/local/lib/python3.10/dist-packages (from open3d) (3.0.4)\n","Requirement already satisfied: nbformat>=5.7.0 in /usr/local/lib/python3.10/dist-packages (from open3d) (5.10.4)\n","Collecting configargparse (from open3d)\n","  Downloading ConfigArgParse-1.7-py3-none-any.whl.metadata (23 kB)\n","Collecting ipywidgets>=8.0.4 (from open3d)\n","  Downloading ipywidgets-8.1.5-py3-none-any.whl.metadata (2.3 kB)\n","Collecting addict (from open3d)\n","  Downloading addict-2.4.0-py3-none-any.whl.metadata (1.0 kB)\n","Requirement already satisfied: pillow>=9.3.0 in /usr/local/lib/python3.10/dist-packages (from open3d) (9.4.0)\n","Requirement already satisfied: matplotlib>=3 in /usr/local/lib/python3.10/dist-packages (from open3d) (3.7.1)\n","Requirement already satisfied: pandas>=1.0 in /usr/local/lib/python3.10/dist-packages (from open3d) (2.1.4)\n","Requirement already satisfied: pyyaml>=5.4.1 in /usr/local/lib/python3.10/dist-packages (from open3d) (6.0.2)\n","Requirement already satisfied: scikit-learn>=0.21 in /usr/local/lib/python3.10/dist-packages (from open3d) (1.3.2)\n","Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from open3d) (4.66.5)\n","Collecting pyquaternion (from open3d)\n","  Downloading pyquaternion-0.9.9-py3-none-any.whl.metadata (1.4 kB)\n","Requirement already satisfied: Flask<3.1,>=1.0.4 in /usr/local/lib/python3.10/dist-packages (from dash>=2.6.0->open3d) (2.2.5)\n","Requirement already satisfied: plotly>=5.0.0 in /usr/local/lib/python3.10/dist-packages (from dash>=2.6.0->open3d) (5.15.0)\n","Collecting dash-html-components==2.0.0 (from dash>=2.6.0->open3d)\n","  Downloading dash_html_components-2.0.0-py3-none-any.whl.metadata (3.8 kB)\n","Collecting dash-core-components==2.0.0 (from dash>=2.6.0->open3d)\n","  Downloading dash_core_components-2.0.0-py3-none-any.whl.metadata (2.9 kB)\n","Collecting dash-table==5.0.0 (from dash>=2.6.0->open3d)\n","  Downloading dash_table-5.0.0-py3-none-any.whl.metadata (2.4 kB)\n","Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.10/dist-packages (from dash>=2.6.0->open3d) (8.4.0)\n","Requirement already satisfied: typing-extensions>=4.1.1 in /usr/local/lib/python3.10/dist-packages (from dash>=2.6.0->open3d) (4.12.2)\n","Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from dash>=2.6.0->open3d) (2.32.3)\n","Collecting retrying (from dash>=2.6.0->open3d)\n","  Downloading retrying-1.3.4-py3-none-any.whl.metadata (6.9 kB)\n","Requirement already satisfied: nest-asyncio in /usr/local/lib/python3.10/dist-packages (from dash>=2.6.0->open3d) (1.6.0)\n","Requirement already satisfied: setuptools in /usr/local/lib/python3.10/dist-packages (from dash>=2.6.0->open3d) (71.0.4)\n","Collecting comm>=0.1.3 (from ipywidgets>=8.0.4->open3d)\n","  Downloading comm-0.2.2-py3-none-any.whl.metadata (3.7 kB)\n","Requirement already satisfied: ipython>=6.1.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets>=8.0.4->open3d) (7.34.0)\n","Requirement already satisfied: traitlets>=4.3.1 in /usr/local/lib/python3.10/dist-packages (from ipywidgets>=8.0.4->open3d) (5.7.1)\n","Collecting widgetsnbextension~=4.0.12 (from ipywidgets>=8.0.4->open3d)\n","  Downloading widgetsnbextension-4.0.13-py3-none-any.whl.metadata (1.6 kB)\n","Requirement already satisfied: jupyterlab-widgets~=3.0.12 in /usr/local/lib/python3.10/dist-packages (from ipywidgets>=8.0.4->open3d) (3.0.13)\n","Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3->open3d) (1.3.0)\n","Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3->open3d) (0.12.1)\n","Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3->open3d) (4.53.1)\n","Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3->open3d) (1.4.7)\n","Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3->open3d) (24.1)\n","Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3->open3d) (3.1.4)\n","Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3->open3d) (2.8.2)\n","Requirement already satisfied: fastjsonschema>=2.15 in /usr/local/lib/python3.10/dist-packages (from nbformat>=5.7.0->open3d) (2.20.0)\n","Requirement already satisfied: jsonschema>=2.6 in /usr/local/lib/python3.10/dist-packages (from nbformat>=5.7.0->open3d) (4.23.0)\n","Requirement already satisfied: jupyter-core!=5.0.*,>=4.12 in /usr/local/lib/python3.10/dist-packages (from nbformat>=5.7.0->open3d) (5.7.2)\n","Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas>=1.0->open3d) (2024.1)\n","Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.10/dist-packages (from pandas>=1.0->open3d) (2024.1)\n","Requirement already satisfied: scipy>=1.5.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn>=0.21->open3d) (1.13.1)\n","Requirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-learn>=0.21->open3d) (1.4.2)\n","Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn>=0.21->open3d) (3.5.0)\n","Requirement already satisfied: MarkupSafe>=2.1.1 in /usr/local/lib/python3.10/dist-packages (from werkzeug>=2.2.3->open3d) (2.1.5)\n","Requirement already satisfied: Jinja2>=3.0 in /usr/local/lib/python3.10/dist-packages (from Flask<3.1,>=1.0.4->dash>=2.6.0->open3d) (3.1.4)\n","Requirement already satisfied: itsdangerous>=2.0 in /usr/local/lib/python3.10/dist-packages (from Flask<3.1,>=1.0.4->dash>=2.6.0->open3d) (2.2.0)\n","Requirement already satisfied: click>=8.0 in /usr/local/lib/python3.10/dist-packages (from Flask<3.1,>=1.0.4->dash>=2.6.0->open3d) (8.1.7)\n","Collecting jedi>=0.16 (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n","  Using cached jedi-0.19.1-py2.py3-none-any.whl.metadata (22 kB)\n","Requirement already satisfied: decorator in /usr/local/lib/python3.10/dist-packages (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d) (4.4.2)\n","Requirement already satisfied: pickleshare in /usr/local/lib/python3.10/dist-packages (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d) (0.7.5)\n","Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d) (3.0.47)\n","Requirement already satisfied: pygments in /usr/local/lib/python3.10/dist-packages (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d) (2.16.1)\n","Requirement already satisfied: backcall in /usr/local/lib/python3.10/dist-packages (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d) (0.2.0)\n","Requirement already satisfied: matplotlib-inline in /usr/local/lib/python3.10/dist-packages (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d) (0.1.7)\n","Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.10/dist-packages (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d) (4.9.0)\n","Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat>=5.7.0->open3d) (24.2.0)\n","Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat>=5.7.0->open3d) (2023.12.1)\n","Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat>=5.7.0->open3d) (0.35.1)\n","Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat>=5.7.0->open3d) (0.20.0)\n","Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.10/dist-packages (from jupyter-core!=5.0.*,>=4.12->nbformat>=5.7.0->open3d) (4.3.2)\n","Requirement already satisfied: tenacity>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from plotly>=5.0.0->dash>=2.6.0->open3d) (9.0.0)\n","Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib>=3->open3d) (1.16.0)\n","Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.10/dist-packages (from importlib-metadata->dash>=2.6.0->open3d) (3.20.1)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->dash>=2.6.0->open3d) (3.3.2)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->dash>=2.6.0->open3d) (3.8)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->dash>=2.6.0->open3d) (2.0.7)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->dash>=2.6.0->open3d) (2024.8.30)\n","Requirement already satisfied: parso<0.9.0,>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from jedi>=0.16->ipython>=6.1.0->ipywidgets>=8.0.4->open3d) (0.8.4)\n","Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.10/dist-packages (from pexpect>4.3->ipython>=6.1.0->ipywidgets>=8.0.4->open3d) (0.7.0)\n","Requirement already satisfied: wcwidth in /usr/local/lib/python3.10/dist-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=6.1.0->ipywidgets>=8.0.4->open3d) (0.2.13)\n","Downloading open3d-0.18.0-cp310-cp310-manylinux_2_27_x86_64.whl (399.7 MB)\n","\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m399.7/399.7 MB\u001b[0m \u001b[31m2.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading dash-2.18.0-py3-none-any.whl (7.5 MB)\n","\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.5/7.5 MB\u001b[0m \u001b[31m113.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading dash_core_components-2.0.0-py3-none-any.whl (3.8 kB)\n","Downloading dash_html_components-2.0.0-py3-none-any.whl (4.1 kB)\n","Downloading dash_table-5.0.0-py3-none-any.whl (3.9 kB)\n","Downloading ipywidgets-8.1.5-py3-none-any.whl (139 kB)\n","\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m139.8/139.8 kB\u001b[0m \u001b[31m12.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading addict-2.4.0-py3-none-any.whl (3.8 kB)\n","Downloading ConfigArgParse-1.7-py3-none-any.whl (25 kB)\n","Downloading pyquaternion-0.9.9-py3-none-any.whl (14 kB)\n","Downloading comm-0.2.2-py3-none-any.whl (7.2 kB)\n","Downloading widgetsnbextension-4.0.13-py3-none-any.whl (2.3 MB)\n","\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.3/2.3 MB\u001b[0m \u001b[31m86.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading retrying-1.3.4-py3-none-any.whl (11 kB)\n","Using cached jedi-0.19.1-py2.py3-none-any.whl (1.6 MB)\n","Installing collected packages: dash-table, dash-html-components, dash-core-components, addict, widgetsnbextension, retrying, pyquaternion, jedi, configargparse, comm, ipywidgets, dash, open3d\n","  Attempting uninstall: widgetsnbextension\n","    Found existing installation: widgetsnbextension 3.6.9\n","    Uninstalling widgetsnbextension-3.6.9:\n","      Successfully uninstalled widgetsnbextension-3.6.9\n","  Attempting uninstall: ipywidgets\n","    Found existing installation: ipywidgets 7.7.1\n","    Uninstalling ipywidgets-7.7.1:\n","      Successfully uninstalled ipywidgets-7.7.1\n","Successfully installed addict-2.4.0 comm-0.2.2 configargparse-1.7 dash-2.18.0 dash-core-components-2.0.0 dash-html-components-2.0.0 dash-table-5.0.0 ipywidgets-8.1.5 jedi-0.19.1 open3d-0.18.0 pyquaternion-0.9.9 retrying-1.3.4 widgetsnbextension-4.0.13\n","Collecting vtk\n","  Downloading vtk-9.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.2 kB)\n","Requirement already satisfied: matplotlib>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from vtk) (3.7.1)\n","Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.0.0->vtk) (1.3.0)\n","Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.0.0->vtk) (0.12.1)\n","Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.0.0->vtk) (4.53.1)\n","Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.0.0->vtk) (1.4.7)\n","Requirement already satisfied: numpy>=1.20 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.0.0->vtk) (1.26.4)\n","Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.0.0->vtk) (24.1)\n","Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.0.0->vtk) (9.4.0)\n","Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.0.0->vtk) (3.1.4)\n","Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=2.0.0->vtk) (2.8.2)\n","Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib>=2.0.0->vtk) (1.16.0)\n","Downloading vtk-9.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (92.1 MB)\n","\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m92.1/92.1 MB\u001b[0m \u001b[31m21.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hInstalling collected packages: vtk\n","Successfully installed vtk-9.3.1\n"]}]},{"cell_type":"code","source":["import open3d as o3d\n","import vtk\n","import numpy as np\n","import os\n","import pandas as pd\n","import torch.nn as nn\n","import torch.nn.functional as F\n","import torch\n","from typing import Callable\n","from torch.utils.data import DataLoader, Dataset\n","import time\n","import torch.optim as optim\n","from torch.optim.lr_scheduler import ReduceLROnPlateau\n","from vtkmodules.util.numpy_support import vtk_to_numpy"],"metadata":{"id":"5QOaWN9sx2Tz","executionInfo":{"status":"ok","timestamp":1726138976098,"user_tz":-480,"elapsed":7574,"user":{"displayName":"王宇哲","userId":"05854028536713312921"}}},"execution_count":6,"outputs":[]},{"cell_type":"markdown","source":["# 代码运行与数据读取样例\n","（所有训练和推理过程需要在本部分完成）"],"metadata":{"id":"qXxTzX8Ax_c_"}},{"cell_type":"code","source":["\"\"\"生成index_press_vel\"\"\"\n","np.random.seed(32)\n","train_num = 425\n","valid_num = 75\n","d1_path = \"/content/Training/Dataset_1/Feature_File\"\n","d1_all_index = []\n","for file in os.listdir(d1_path):\n","    if file[0:4] == \"mesh\":\n","      d1_all_index.append(int(file[5:8]))\n","d1_all_index.sort()\n","d1_train_idx = np.random.choice(d1_all_index, train_num, replace=False)\n","d1_valid_idx = np.array(list(set(d1_all_index) - set(d1_train_idx)))\n","d1_train_df = pd.DataFrame(d1_train_idx)\n","d1_valid_df = pd.DataFrame(d1_valid_idx)\n","d1_train_df.to_excel(\"/content/d1_train_index.xlsx\", index=False)\n","d1_valid_df.to_excel(\"/content/d1_valid_index.xlsx\", index=False)\n","\n","\"\"\"生成index_cd\"\"\"\n","np.random.seed(32)\n","train_num = 425\n","valid_num = 75\n","d2_train_idx = np.random.choice(500, train_num, replace=False)\n","d2_valid_idx = np.array(list(set(np.arange(500)) - set(d2_train_idx)))\n","d2_train_df = pd.DataFrame(d2_train_idx)\n","d2_valid_df = pd.DataFrame(d2_valid_idx)\n","d2_train_df.to_excel(\"/content/d2_train_index.xlsx\", index=False)\n","d2_valid_df.to_excel(\"/content/d2_valid_index.xlsx\", index=False)\n"],"metadata":{"id":"m5YvekGzyAFM","executionInfo":{"status":"ok","timestamp":1726138980717,"user_tz":-480,"elapsed":385,"user":{"displayName":"王宇哲","userId":"05854028536713312921"}}},"execution_count":7,"outputs":[]},{"cell_type":"code","source":["\"\"\"生成训练cd的npy文件\"\"\"\n","cd_data_path = \"/content/Feature_File\"\n","save_path = \"/content/d2_npy_file\"\n","os.makedirs(save_path, exist_ok=True)\n","for file in os.listdir(cd_data_path):\n","    file_name, file_extension = os.path.splitext(file)\n","    if file_extension == \".obj\":\n","        mesh = o3d.io.read_triangle_mesh(os.path.join(cd_data_path, file))\n","        pcd = mesh.sample_points_uniformly(number_of_points=5000)\n","        pcd = np.asarray(pcd.points, dtype=np.float32)\n","        print(\"file name: {:<50} shape: {}\".format(file, pcd.shape))\n","        np.save(os.path.join(save_path, f\"{file_name}.npy\"), pcd)\n","print(\"Done!\")\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"e9KfMaQT_SvQ","executionInfo":{"status":"ok","timestamp":1726139045786,"user_tz":-480,"elapsed":60516,"user":{"displayName":"王宇哲","userId":"05854028536713312921"}},"outputId":"6bab3e4f-cf5c-483a-d43c-10fff6f41f41"},"execution_count":8,"outputs":[{"output_type":"stream","name":"stdout","text":["file name: 196b1fb2c6c36fa5afe1d4530f4c6e24.obj               shape: (5000, 3)\n","file name: 1e17510abe8f98bea697d949e28d773c.obj               shape: (5000, 3)\n","file name: 1d549e9c44773cb3aa69edcaeea3d6af_aug.obj           shape: (5000, 3)\n","file name: 19f52dd4592c3fb5531e940de4b7770d_aug.obj           shape: (5000, 3)\n","file name: 1883101d1c9f911aecf12ada05e4378c.obj               shape: (5000, 3)\n","file name: 125a4780c2d5095d19454008aa267bf_aug.obj            shape: (5000, 3)\n","file name: 11ed2151cc752a548958855d2c5465cf_aug.obj           shape: (5000, 3)\n","file name: 149978eefad83cbafd8e7b05498794b9_aug.obj           shape: (5000, 3)\n","file name: 1284876ac0e2371aa4dbb766064f8bbf_aug.obj           shape: (5000, 3)\n","file name: 12a11a800f6869d99ea5c205086e2a63_aug.obj           shape: (5000, 3)\n","file name: 2203e5410a92a5874ef0d0a5fdfd8e84_aug.obj           shape: (5000, 3)\n","file name: 1f191e0327ce54474cdd04162f008888_aug.obj           shape: (5000, 3)\n","file name: 21205bdb7ca9be1d977e464a4b82757d_aug.obj           shape: (5000, 3)\n","file name: 22d57b895b9cd22137ca7da637f7c918_aug.obj           shape: (5000, 3)\n","file name: 1cb095eaa6564806b8cf782e8c539948_aug.obj           shape: (5000, 3)\n","file name: 1c158fc218e27a60b11647ffa4306609.obj               shape: (5000, 3)\n","file name: 17eb10ccad874213becf71e2e014ff6f.obj               shape: (5000, 3)\n","file name: 1096a3284751db563494893564e07d4a.obj               shape: (5000, 3)\n","file name: 155066e1f87017c36e966db738361973.obj               shape: (5000, 3)\n","file name: 1eae4fcec701c176e742b0b5e87bec54_aug.obj           shape: (5000, 3)\n","file name: 1feeeaeb8b56e46d2dfaf88f42097063_aug.obj           shape: (5000, 3)\n","file name: 135e6c63ca10dd9fab711dc2dd9249b0_aug.obj           shape: (5000, 3)\n","file name: 1ef1be2d62d35937f3efc94c2d31dc5_aug.obj            shape: (5000, 3)\n","file name: 1be075751d7cfbf9ee8e9bd690a19ec1_aug.obj           shape: (5000, 3)\n","file name: 1a83a525ae32afcf622ac2f50deaba1f_aug.obj           shape: (5000, 3)\n","file name: 21fcf7b6cfcd2c7933d7c9e122eec9b6.obj               shape: (5000, 3)\n","file name: 2136f0f7edf45982b7727d322e44e79b.obj               shape: (5000, 3)\n","file name: 1523461a96bcc90668c415156b102065_aug.obj           shape: (5000, 3)\n","file name: 192182fe7a2992d19007ca45ff59e833.obj               shape: (5000, 3)\n","file name: 1a1de15e572e039df085b75b20c2db33.obj               shape: (5000, 3)\n","file name: 17a5e57aaa824d85becf71e2e014ff6f_aug.obj           shape: (5000, 3)\n","file name: 19d49c8015948b742d60c8689a64d7a0.obj               shape: (5000, 3)\n","file name: 17eb10ccad874213becf71e2e014ff6f_aug.obj           shape: (5000, 3)\n","file name: 1151e7cd24f5bd21ccbd9e5bb82dd04_aug.obj            shape: (5000, 3)\n","file name: 1f5a6d3c74f32053b6163196882ac0ca.obj               shape: (5000, 3)\n","file name: 22bc49837550bed21e570d3da54bf9d.obj                shape: (5000, 3)\n","file name: 1313f9ebc319271b532fe10b91889f2b_aug.obj           shape: (5000, 3)\n","file name: 1d4b2404a00ef4bb627014ff98c41eb1_aug.obj           shape: (5000, 3)\n","file name: 22d20559bdb13284aa4eefa8f42b566e_aug.obj           shape: (5000, 3)\n","file name: 20649c88556a7e7a113ef105f1affa3f.obj               shape: (5000, 3)\n","file name: 1ebb7511feac4d62381a9e1cee6d0b00_aug.obj           shape: (5000, 3)\n","file name: 22d477830b1bbbded536c1ebda275556.obj               shape: (5000, 3)\n","file name: 125a4780c2d5095d19454008aa267bf.obj                shape: (5000, 3)\n","file name: 1328a95d69cefe32f200a72c9245aee7_aug.obj           shape: (5000, 3)\n","file name: 1778fb4a8eebe3b7a3018bac44737f2c_aug.obj           shape: (5000, 3)\n","file name: 12d463649ed6c176ab98a7077c964a60_aug.obj           shape: (5000, 3)\n","file name: 204b1b3e35df174859fcf77704d7f1e8.obj               shape: (5000, 3)\n","file name: 1cff510c0630c3cc673ddeabdcc8c6e_aug.obj            shape: (5000, 3)\n","file name: 1f1b5c7c01557c484354740e038a7994_aug.obj           shape: (5000, 3)\n","file name: 2198bc0843bbe5b452e828d2fd3a2cfa_aug.obj           shape: (5000, 3)\n","file name: 1e6e7bfb08b6b44d615949fb78ffe44f_aug.obj           shape: (5000, 3)\n","file name: 188cf79b4c27bb8fef46cffe4939fce1.obj               shape: (5000, 3)\n","file name: 12a0dcc66c989decb915e7c6dfc74ab.obj                shape: (5000, 3)\n","file name: 1cd6320c2778a0587f9f7271076cbfc3.obj               shape: (5000, 3)\n","file name: 20649c88556a7e7a113ef105f1affa3f_aug.obj           shape: (5000, 3)\n","file name: 1dc757e77f3cfad0253c03b7df20edd5.obj               shape: (5000, 3)\n","file name: 119464e186d8ef6f52aa494042b7c9db.obj               shape: (5000, 3)\n","file name: 15fcfe91d44c0e15e5c9256f048d92d2.obj               shape: (5000, 3)\n","file name: 1f8aee726cbf44c23d27832ab9ea6d92.obj               shape: (5000, 3)\n","file name: 1d4b2404a00ef4bb627014ff98c41eb1.obj               shape: (5000, 3)\n","file name: 187b002f0af1ab5a473f10e6caaeca56.obj               shape: (5000, 3)\n","file name: 2076be423fa5bb9f9e908ecb03b3d6fb.obj               shape: (5000, 3)\n","file name: 1b43ec15ddae61b62c6ff27a52f05cff.obj               shape: (5000, 3)\n","file name: 12243301d1c8148e33d7c9e122eec9b6.obj               shape: (5000, 3)\n","file name: 1151e7cd24f5bd21ccbd9e5bb82dd04.obj                shape: (5000, 3)\n","file name: 1f43243b81df21277925d1ea63246010.obj               shape: (5000, 3)\n","file name: 1a7b9697be903334b99755e16c4a9d21.obj               shape: (5000, 3)\n","file name: 10e99b1475098c0aaa69dfdc5532bb13.obj               shape: (5000, 3)\n","file name: 1c3d657de143e3c4bbb53134d8c41892_aug.obj           shape: (5000, 3)\n","file name: 187b002f0af1ab5a473f10e6caaeca56_aug.obj           shape: (5000, 3)\n","file name: 11a3ed3fa7b4b80b6782fc9cb2c37844.obj               shape: (5000, 3)\n","file name: 18aad9d102afbca57ba2273581c30cb.obj                shape: (5000, 3)\n","file name: 20dd2b72086b5149d536c1ebda275556_aug.obj           shape: (5000, 3)\n","file name: 1dbb24dedcb23beab1bb46d2556ba67d.obj               shape: (5000, 3)\n","file name: 16b8c04d29bb4c36b11647ffa4306609.obj               shape: (5000, 3)\n","file name: 126ab047e114433f1dd25374e2be795_aug.obj            shape: (5000, 3)\n","file name: 1b94aad142e6c2b8af9f38a1ee687286_aug.obj           shape: (5000, 3)\n","file name: 1fa08a3c56c3e9a99393793f9cf3dbea.obj               shape: (5000, 3)\n","file name: 1a19271683597db4fe7e6f8a8e38f62d_aug.obj           shape: (5000, 3)\n","file name: 1778fb4a8eebe3b7a3018bac44737f2c.obj               shape: (5000, 3)\n","file name: 18d1daf9f7a16d47d3a5e3d474de9eab_aug.obj           shape: (5000, 3)\n","file name: 17e146cb10c72fcfa2b80c598d71bf14_aug.obj           shape: (5000, 3)\n","file name: 206e39a5f67f4a4a81d0c86cc18e6647_aug.obj           shape: (5000, 3)\n","file name: 192182fe7a2992d19007ca45ff59e833_aug.obj           shape: (5000, 3)\n","file name: 1c9725db9005eda1aaa354fd606bff0_aug.obj            shape: (5000, 3)\n","file name: 161174665f7d1ed7b4f87c42b345834_aug.obj            shape: (5000, 3)\n","file name: 1fde8f41c6a39c07111f983eb293b51a_aug.obj           shape: (5000, 3)\n","file name: 151bebc457224c2733d7c9e122eec9b6_aug.obj           shape: (5000, 3)\n","file name: 1d5872004edf12038644d87f4c93cda7.obj               shape: (5000, 3)\n","file name: 1897d39147b57221cd782e2b2753093.obj                shape: (5000, 3)\n","file name: 127b9ba77b54ba59bda733a39f84326d_aug.obj           shape: (5000, 3)\n","file name: 12711a683ffb81bad536c1ebda275556.obj               shape: (5000, 3)\n","file name: 12a034b6be9afb50ae983613a2e0a741.obj               shape: (5000, 3)\n","file name: 1ba30d64da90ea05283ffcfc40c29975_aug.obj           shape: (5000, 3)\n","file name: 1a63a260180f11baafe717997470b28d.obj               shape: (5000, 3)\n","file name: 191f9cd970e5b0cc174ee7ebab9d8065_aug.obj           shape: (5000, 3)\n","file name: 1cf14b4004e1d2e22c6ce678c9114ba5_aug.obj           shape: (5000, 3)\n","file name: 193ec1089f0a98a36518e6cd1fbc5fab_aug.obj           shape: (5000, 3)\n","file name: 152606cff5186001a544a2e1f78203c4.obj               shape: (5000, 3)\n","file name: 165e03c012cb5b6c3bb4d660359dfc5.obj                shape: (5000, 3)\n","file name: 1a4337da899da1936909632a947fc19b.obj               shape: (5000, 3)\n","file name: 1a3782ae4bd711b66b418c7d9fedcaa9_aug.obj           shape: (5000, 3)\n","file name: 18d9ac72442260e0e97c6bb243ef67d_aug.obj            shape: (5000, 3)\n","file name: 1525d96ab2b75980aaa232d0915adae9_aug.obj           shape: (5000, 3)\n","file name: 14ace3e8d05f8d21a413908c0e169330_aug.obj           shape: (5000, 3)\n","file name: 1c5a350ea0f55f793fbce9ec40e1f047.obj               shape: (5000, 3)\n","file name: 1f0d149b320aa4faafe1d4530f4c6e24.obj               shape: (5000, 3)\n","file name: 1ffe99aba88ca413ca71c17c1eef7213_aug.obj           shape: (5000, 3)\n","file name: 11d1fdaedf3ab83b8fb28f8a689c8ba3_aug.obj           shape: (5000, 3)\n","file name: 19d35f3e0c0b402125ddb89f02fe6cc0.obj               shape: (5000, 3)\n","file name: 1e4976203d1dc1887eaeab1f0c9120b7_aug.obj           shape: (5000, 3)\n","file name: 1cda44fbcc6757d9becf71e2e014ff6f.obj               shape: (5000, 3)\n","file name: 18a9275b78be4b9ec6d3267fc5334296_aug.obj           shape: (5000, 3)\n","file name: 20ece5093ff8da0bbda72093f9b5aa73.obj               shape: (5000, 3)\n","file name: 16d214c9243bc61d25ca48e6a6faa909.obj               shape: (5000, 3)\n","file name: 164ca4824dd241545fcb05674109534a.obj               shape: (5000, 3)\n","file name: 1a83a525ae32afcf622ac2f50deaba1f.obj               shape: (5000, 3)\n","file name: 20ece5093ff8da0bbda72093f9b5aa73_aug.obj           shape: (5000, 3)\n","file name: 171c20ce4de5ee8730f65ce13e7c1910_aug.obj           shape: (5000, 3)\n","file name: 175a289947f549b0e088606e38104b2.obj                shape: (5000, 3)\n","file name: 16cd3253d5f9967165b633b6461ff32a.obj               shape: (5000, 3)\n","file name: 1c6627e55a840dac5b50bb0532f2ede.obj                shape: (5000, 3)\n","file name: 135e6c63ca10dd9fab711dc2dd9249b0.obj               shape: (5000, 3)\n","file name: 161174665f7d1ed7b4f87c42b345834.obj                shape: (5000, 3)\n","file name: 19d0843797b8b2216abce8cb03e7794.obj                shape: (5000, 3)\n","file name: 1cd4a2c1b3b4a9661487189ebf835715.obj               shape: (5000, 3)\n","file name: 158bf7ce06fbc9eccc0129454ac351ce.obj               shape: (5000, 3)\n","file name: 12a0dcc66c989decb915e7c6dfc74ab_aug.obj            shape: (5000, 3)\n","file name: 165aec174bb93968a114c8c036e29a08_aug.obj           shape: (5000, 3)\n","file name: 2303fe92496bfb76994a3466f8481f8a.obj               shape: (5000, 3)\n","file name: 1a87a329781b15763820d8f180caa23a_aug.obj           shape: (5000, 3)\n","file name: 17a5e57aaa824d85becf71e2e014ff6f.obj               shape: (5000, 3)\n","file name: 19541db644551287ee0112963a7e11e3.obj               shape: (5000, 3)\n","file name: 202e16b2af5297daadfc67bbb12b5d60.obj               shape: (5000, 3)\n","file name: 20a967d68b6d291512da0dbf3c68e847.obj               shape: (5000, 3)\n","file name: 109567d7d55b8fe515a520abec2f04dd.obj               shape: (5000, 3)\n","file name: 1f5a6d3c74f32053b6163196882ac0ca_aug.obj           shape: (5000, 3)\n","file name: 126ab047e114433f1dd25374e2be795.obj                shape: (5000, 3)\n","file name: 19b0d347716db767b6f4ab48e881f088.obj               shape: (5000, 3)\n","file name: 209c79dbd4f7ad944ee32d005103a21a.obj               shape: (5000, 3)\n","file name: 1621d63a7efe0ba25df3c6413d40ccb2.obj               shape: (5000, 3)\n","file name: 2136f0f7edf45982b7727d322e44e79b_aug.obj           shape: (5000, 3)\n","file name: 155066e1f87017c36e966db738361973_aug.obj           shape: (5000, 3)\n","file name: 10fda5aa525f6232be8100817bfe3c8a.obj               shape: (5000, 3)\n","file name: 1c6627e55a840dac5b50bb0532f2ede_aug.obj            shape: (5000, 3)\n","file name: 1c86d4441f5f38d552c4c70ef22e33be.obj               shape: (5000, 3)\n","file name: 1f5e1b0661b340fc81dcc09cafd93d2e_aug.obj           shape: (5000, 3)\n","file name: 1713a1ac8aedcc522b12ea83455b0f44.obj               shape: (5000, 3)\n","file name: 1079efee042629d4ce28f0f1b509eda_aug.obj            shape: (5000, 3)\n","file name: 12d7c4013415ea147f5b0cb87a91de52.obj               shape: (5000, 3)\n","file name: 1e17510abe8f98bea697d949e28d773c_aug.obj           shape: (5000, 3)\n","file name: 1cff510c0630c3cc673ddeabdcc8c6e.obj                shape: (5000, 3)\n","file name: 10716a366de708b8fac96522b26f7fd_aug.obj            shape: (5000, 3)\n","file name: 19186a0accbf7c68ef7b860bd772a37.obj                shape: (5000, 3)\n","file name: 19bb8605a7a5233e4d7ac55d461d1984.obj               shape: (5000, 3)\n","file name: 1520d7ab01b96a4d2f20449572a3a77c.obj               shape: (5000, 3)\n","file name: 1c3d657de143e3c4bbb53134d8c41892.obj               shape: (5000, 3)\n","file name: 18a9275b78be4b9ec6d3267fc5334296.obj               shape: (5000, 3)\n","file name: 11a3ed3fa7b4b80b6782fc9cb2c37844_aug.obj           shape: (5000, 3)\n","file name: 1cb095eaa6564806b8cf782e8c539948.obj               shape: (5000, 3)\n","file name: 10f158d2f43926ac80360680c1602c7d_aug.obj           shape: (5000, 3)\n","file name: 1ef773413c60acba6ca2b6e5474aad11.obj               shape: (5000, 3)\n","file name: 128ad72f92a3e96db96212c8f6cd06e.obj                shape: (5000, 3)\n","file name: 1a7584ca6cbf03e41c35d6e6d8a2eb84.obj               shape: (5000, 3)\n","file name: 1089cbe82dc0e72133d7c9e122eec9b6.obj               shape: (5000, 3)\n","file name: 22d477830b1bbbded536c1ebda275556_aug.obj           shape: (5000, 3)\n","file name: 1466b91f01aafba9ed3696d854eee1ec_aug.obj           shape: (5000, 3)\n","file name: 1d0a46cfc2799eefdeea60824a43a0b.obj                shape: (5000, 3)\n","file name: 1c86d4441f5f38d552c4c70ef22e33be_aug.obj           shape: (5000, 3)\n","file name: 1b83d1d3554d04906a34aa94ca8a3355.obj               shape: (5000, 3)\n","file name: 12a034b6be9afb50ae983613a2e0a741_aug.obj           shape: (5000, 3)\n","file name: 158bf7ce06fbc9eccc0129454ac351ce_aug.obj           shape: (5000, 3)\n","file name: 14caf086a8cbf59f709a6634bf501a9e.obj               shape: (5000, 3)\n","file name: 1ca64f9d6e008fb35fcb05674109534a_aug.obj           shape: (5000, 3)\n","file name: 10de315497dbce1d5d51c15712538c3c.obj               shape: (5000, 3)\n","file name: 21205bdb7ca9be1d977e464a4b82757d.obj               shape: (5000, 3)\n","file name: 1cd4a2c1b3b4a9661487189ebf835715_aug.obj           shape: (5000, 3)\n","file name: 1b83d1d3554d04906a34aa94ca8a3355_aug.obj           shape: (5000, 3)\n","file name: 22d57b895b9cd22137ca7da637f7c918.obj               shape: (5000, 3)\n","file name: 19b0d347716db767b6f4ab48e881f088_aug.obj           shape: (5000, 3)\n","file name: 127435fd1a61550887dc1da2515df8f7_aug.obj           shape: (5000, 3)\n","file name: 1ab80bc91a45b7d0a31091d2234b9f68_aug.obj           shape: (5000, 3)\n","file name: 1c14ef4c48b7d95d61c6c61410fc904b_aug.obj           shape: (5000, 3)\n","file name: 156d4748560997c9a848f24544821b25_aug.obj           shape: (5000, 3)\n","file name: 212685bfc2a32cd9fe8cfdfb3bfc3376_aug.obj           shape: (5000, 3)\n","file name: 1f1b5c7c01557c484354740e038a7994.obj               shape: (5000, 3)\n","file name: 1e58b82b7c7c93b3e3e80cf56a92a302.obj               shape: (5000, 3)\n","file name: 1c53bc6a3992b0843677ee89898ae463.obj               shape: (5000, 3)\n","file name: 22bc49837550bed21e570d3da54bf9d_aug.obj            shape: (5000, 3)\n","file name: 20a967d68b6d291512da0dbf3c68e847_aug.obj           shape: (5000, 3)\n","file name: 15fcfe91d44c0e15e5c9256f048d92d2_aug.obj           shape: (5000, 3)\n","file name: 2181653ec5313196d2c8600344d8bfab.obj               shape: (5000, 3)\n","file name: 1d0a46cfc2799eefdeea60824a43a0b_aug.obj            shape: (5000, 3)\n","file name: 1eae4fcec701c176e742b0b5e87bec54.obj               shape: (5000, 3)\n","file name: 171c20ce4de5ee8730f65ce13e7c1910.obj               shape: (5000, 3)\n","file name: 1ae530f49a914595b491214a0cc2380_aug.obj            shape: (5000, 3)\n","file name: 196b1fb2c6c36fa5afe1d4530f4c6e24_aug.obj           shape: (5000, 3)\n","file name: 192fdf42f5a2623d673ddeabdcc8c6e_aug.obj            shape: (5000, 3)\n","file name: 1a7584ca6cbf03e41c35d6e6d8a2eb84_aug.obj           shape: (5000, 3)\n","file name: 1687b77b048d1aaf635b88185c42637a.obj               shape: (5000, 3)\n","file name: 17e146cb10c72fcfa2b80c598d71bf14.obj               shape: (5000, 3)\n","file name: 15cc37ac9b3b756acfd826dd468a5497_aug.obj           shape: (5000, 3)\n","file name: 10cc4974157f8890c5d97accdeaf9792.obj               shape: (5000, 3)\n","file name: 1cf3a0122ae9d45afe58aa5d5c441132.obj               shape: (5000, 3)\n","file name: 22db50ecb45656fe8b55a52bfd1cce7a_aug.obj           shape: (5000, 3)\n","file name: 1a87a329781b15763820d8f180caa23a.obj               shape: (5000, 3)\n","file name: 15d37c9fdde15a3e433084df759e05b.obj                shape: (5000, 3)\n","file name: 1b2ef0809ca1abc7ca92a4cdad802b45.obj               shape: (5000, 3)\n","file name: 14caf086a8cbf59f709a6634bf501a9e_aug.obj           shape: (5000, 3)\n","file name: 1beac5e41e17b680fade9f69c520312a_aug.obj           shape: (5000, 3)\n","file name: 1883101d1c9f911aecf12ada05e4378c_aug.obj           shape: (5000, 3)\n","file name: 1c4590ebc214e029816bd8f64e08b2bc_aug.obj           shape: (5000, 3)\n","file name: 11d3ec621322ca723c35e65001c8c258.obj               shape: (5000, 3)\n","file name: 1f167c74bca9ec83622a8f038ee88042.obj               shape: (5000, 3)\n","file name: 198f9bc1c351c97948c9215ea29b906f_aug.obj           shape: (5000, 3)\n","file name: 1fa08a3c56c3e9a99393793f9cf3dbea_aug.obj           shape: (5000, 3)\n","file name: 1714b6e57c8c4983fb1aad5dae793ff4.obj               shape: (5000, 3)\n","file name: 1b43ec15ddae61b62c6ff27a52f05cff_aug.obj           shape: (5000, 3)\n","file name: 188cf79b4c27bb8fef46cffe4939fce1_aug.obj           shape: (5000, 3)\n","file name: 112dbe7aec2c6a96436916a86a90ed7_aug.obj            shape: (5000, 3)\n","file name: 185059ee821245d176fb25377c3b547e_aug.obj           shape: (5000, 3)\n","file name: 1d4eaafea3ae8303ce94fde2d6224f79.obj               shape: (5000, 3)\n","file name: 15d37c9fdde15a3e433084df759e05b_aug.obj            shape: (5000, 3)\n","file name: 1d343a64b4789983c10e9d4ee4bae4f4.obj               shape: (5000, 3)\n","file name: 1aeee7288b89ec1cc805dfe4ca9f2fdb_aug.obj           shape: (5000, 3)\n","file name: 22d20559bdb13284aa4eefa8f42b566e.obj               shape: (5000, 3)\n","file name: 1cd6320c2778a0587f9f7271076cbfc3_aug.obj           shape: (5000, 3)\n","file name: 1c4f6c884a2132903c35e65001c8c258.obj               shape: (5000, 3)\n","file name: 15bdc3b07627ea2f6dca8796028a1679_aug.obj           shape: (5000, 3)\n","file name: 1d4eaafea3ae8303ce94fde2d6224f79_aug.obj           shape: (5000, 3)\n","file name: 1f04bbab96c75a7572152988eac576ab_aug.obj           shape: (5000, 3)\n","file name: 1feeeaeb8b56e46d2dfaf88f42097063.obj               shape: (5000, 3)\n","file name: 1be81460e620aea65cde8c99e4b182f9_aug.obj           shape: (5000, 3)\n","file name: 152606cff5186001a544a2e1f78203c4_aug.obj           shape: (5000, 3)\n","file name: 1ca64f9d6e008fb35fcb05674109534a.obj               shape: (5000, 3)\n","file name: 1e4976203d1dc1887eaeab1f0c9120b7.obj               shape: (5000, 3)\n","file name: 1ef773413c60acba6ca2b6e5474aad11_aug.obj           shape: (5000, 3)\n","file name: 17d3fe6fcaa66dc75bdece2095ceb985.obj               shape: (5000, 3)\n","file name: 1d82316d98f620513b86a9df4269733.obj                shape: (5000, 3)\n","file name: 19483d3b574b49a5742cc2d61ad88fbd_aug.obj           shape: (5000, 3)\n","file name: 22cc85ff2ce8213f2ac826a3c82da491.obj               shape: (5000, 3)\n","file name: 17b74ace5d2791eeab7ec554b18515bb.obj               shape: (5000, 3)\n","file name: 17600a4881b1ff6a5c14de0cb75f4d3e_aug.obj           shape: (5000, 3)\n","file name: 1f04bbab96c75a7572152988eac576ab.obj               shape: (5000, 3)\n","file name: 125be09e498dcfde55048eb8b7ed14b6.obj               shape: (5000, 3)\n","file name: 1523461a96bcc90668c415156b102065.obj               shape: (5000, 3)\n","file name: 1096a3284751db563494893564e07d4a_aug.obj           shape: (5000, 3)\n","file name: 136b0793373b1fc9e9d8921ebe6d5b8e_aug.obj           shape: (5000, 3)\n","file name: 1ed1a74a5e70539e280b225afd3dc9fd_aug.obj           shape: (5000, 3)\n","file name: 1da433472693082a3b03cab05e253d9.obj                shape: (5000, 3)\n","file name: 11a96098620b2ebac2f9fb5458a091d1.obj               shape: (5000, 3)\n","file name: 22db50ecb45656fe8b55a52bfd1cce7a.obj               shape: (5000, 3)\n","file name: 1c1bd2dcbb13aa5a6b652ed61c4ad126.obj               shape: (5000, 3)\n","file name: 1be075751d7cfbf9ee8e9bd690a19ec1.obj               shape: (5000, 3)\n","file name: 11a96098620b2ebac2f9fb5458a091d1_aug.obj           shape: (5000, 3)\n","file name: 12b5e4f52c22b348d8499d8846cb4c3b.obj               shape: (5000, 3)\n","file name: 15c785a7505992c3a9be8fd09fb14f4f.obj               shape: (5000, 3)\n","file name: 147eca8afd2d3da291a714d137f7e052_aug.obj           shape: (5000, 3)\n","file name: 18244d93dbd2afbebda733a39f84326d_aug.obj           shape: (5000, 3)\n","file name: 1b318e41d5143e7a33ae101d4377190c_aug.obj           shape: (5000, 3)\n","file name: 19541db644551287ee0112963a7e11e3_aug.obj           shape: (5000, 3)\n","file name: 189cffefcdd5cb071a126804ae24042_aug.obj            shape: (5000, 3)\n","file name: 119033fe083145e22f31600ac759c763_aug.obj           shape: (5000, 3)\n","file name: 18d1daf9f7a16d47d3a5e3d474de9eab.obj               shape: (5000, 3)\n","file name: 1aeee7288b89ec1cc805dfe4ca9f2fdb.obj               shape: (5000, 3)\n","file name: 1687b77b048d1aaf635b88185c42637a_aug.obj           shape: (5000, 3)\n","file name: 2254e63f695a1cccbbae182929bb7dd.obj                shape: (5000, 3)\n","file name: 1f43243b81df21277925d1ea63246010_aug.obj           shape: (5000, 3)\n","file name: 192fdf42f5a2623d673ddeabdcc8c6e.obj                shape: (5000, 3)\n","file name: 1c9725db9005eda1aaa354fd606bff0.obj                shape: (5000, 3)\n","file name: 17d3fe6fcaa66dc75bdece2095ceb985_aug.obj           shape: (5000, 3)\n","file name: 156d4748560997c9a848f24544821b25.obj               shape: (5000, 3)\n","file name: 1aef0af3cdafb118c6a40bdf315062da_aug.obj           shape: (5000, 3)\n","file name: 19483d3b574b49a5742cc2d61ad88fbd.obj               shape: (5000, 3)\n","file name: 20e01ed9c14d4659e61b9ff60b1be412.obj               shape: (5000, 3)\n","file name: 15189ac0d9a6364819d0b04fbc21ff71_aug.obj           shape: (5000, 3)\n","file name: 1621d63a7efe0ba25df3c6413d40ccb2_aug.obj           shape: (5000, 3)\n","file name: 154028cc3c2b4846436916a86a90ed7.obj                shape: (5000, 3)\n","file name: 1e8e92f8b3192f4515ceb5e63caaf714.obj               shape: (5000, 3)\n","file name: 1c158fc218e27a60b11647ffa4306609_aug.obj           shape: (5000, 3)\n","file name: 16cb7990169197465c46d8051f2293ec_aug.obj           shape: (5000, 3)\n","file name: 1313f9ebc319271b532fe10b91889f2b.obj               shape: (5000, 3)\n","file name: 155cf95c37a3c2c01edf5a868fdffb8d.obj               shape: (5000, 3)\n","file name: 1aef0af3cdafb118c6a40bdf315062da.obj               shape: (5000, 3)\n","file name: 119464e186d8ef6f52aa494042b7c9db_aug.obj           shape: (5000, 3)\n","file name: 215da971831129bf63ee8a34069b7c5.obj                shape: (5000, 3)\n","file name: 1f0d149b320aa4faafe1d4530f4c6e24_aug.obj           shape: (5000, 3)\n","file name: 2181ff0bcb76d33428044fe9244db50a_aug.obj           shape: (5000, 3)\n","file name: 2131d5bcea38ce3a68bdb39538968e8e.obj               shape: (5000, 3)\n","file name: 17600a4881b1ff6a5c14de0cb75f4d3e.obj               shape: (5000, 3)\n","file name: 2076be423fa5bb9f9e908ecb03b3d6fb_aug.obj           shape: (5000, 3)\n","file name: 139718b631cbca546a36136419d55d5c.obj               shape: (5000, 3)\n","file name: 1b318e41d5143e7a33ae101d4377190c.obj               shape: (5000, 3)\n","file name: 164ca4824dd241545fcb05674109534a_aug.obj           shape: (5000, 3)\n","file name: 11ed2151cc752a548958855d2c5465cf.obj               shape: (5000, 3)\n","file name: 13353d601c189244c23a72fe560e6753.obj               shape: (5000, 3)\n","file name: 19c25429d34ce9748c844a5e3a5e1a93_aug.obj           shape: (5000, 3)\n","file name: 16af2ec5b985f475d5e91f1b79ff5afc_aug.obj           shape: (5000, 3)\n","file name: 1079efee042629d4ce28f0f1b509eda.obj                shape: (5000, 3)\n","file name: 1ef1be2d62d35937f3efc94c2d31dc5.obj                shape: (5000, 3)\n","file name: 21411688ce54f56484c8590fa96123c_aug.obj            shape: (5000, 3)\n","file name: 10716a366de708b8fac96522b26f7fd.obj                shape: (5000, 3)\n","file name: 2198bc0843bbe5b452e828d2fd3a2cfa.obj               shape: (5000, 3)\n","file name: 1d7fd8ff8d68f74ce3ccef60655d5f2d_aug.obj           shape: (5000, 3)\n","file name: 15d6cd7877c6601d9ed410a010efa019_aug.obj           shape: (5000, 3)\n","file name: 16cd3253d5f9967165b633b6461ff32a_aug.obj           shape: (5000, 3)\n","file name: 15189ac0d9a6364819d0b04fbc21ff71.obj               shape: (5000, 3)\n","file name: 209c79dbd4f7ad944ee32d005103a21a_aug.obj           shape: (5000, 3)\n","file name: 1963641a15916c03709ce7955adef61b_aug.obj           shape: (5000, 3)\n","file name: 1ae530f49a914595b491214a0cc2380.obj                shape: (5000, 3)\n","file name: 10cc4974157f8890c5d97accdeaf9792_aug.obj           shape: (5000, 3)\n","file name: 1dc08fb398ba1b389b63159808b36877.obj               shape: (5000, 3)\n","file name: 16cb7990169197465c46d8051f2293ec.obj               shape: (5000, 3)\n","file name: 16af2ec5b985f475d5e91f1b79ff5afc.obj               shape: (5000, 3)\n","file name: 1ef8f98842f2a388a4dbb766064f8bbf_aug.obj           shape: (5000, 3)\n","file name: 1dbb02c20bb93af81c1b3b2ed8d13bf8.obj               shape: (5000, 3)\n","file name: 1897d39147b57221cd782e2b2753093_aug.obj            shape: (5000, 3)\n","file name: 1d2c5ee3b5ef205164bd4e0c23ded276.obj               shape: (5000, 3)\n","file name: 18d9ac72442260e0e97c6bb243ef67d.obj                shape: (5000, 3)\n","file name: 1ba30d64da90ea05283ffcfc40c29975.obj               shape: (5000, 3)\n","file name: 1abeca7159db7ed9f200a72c9245aee7.obj               shape: (5000, 3)\n","file name: 1c3d0cfb621e45fbf8e4e0fd40d76860_aug.obj           shape: (5000, 3)\n","file name: 1c1bd2dcbb13aa5a6b652ed61c4ad126_aug.obj           shape: (5000, 3)\n","file name: 12941cb870df79b9815337ac44abb964.obj               shape: (5000, 3)\n","file name: 19d35f3e0c0b402125ddb89f02fe6cc0_aug.obj           shape: (5000, 3)\n","file name: 198d8e274c59511b36a1a31af8f59_aug.obj              shape: (5000, 3)\n","file name: 151bebc457224c2733d7c9e122eec9b6.obj               shape: (5000, 3)\n","file name: 127435fd1a61550887dc1da2515df8f7.obj               shape: (5000, 3)\n","file name: 1e6e7bfb08b6b44d615949fb78ffe44f.obj               shape: (5000, 3)\n","file name: 1be81460e620aea65cde8c99e4b182f9.obj               shape: (5000, 3)\n","file name: 1dd6eb41ad5a1267bda733a39f84326d.obj               shape: (5000, 3)\n","file name: 19d0843797b8b2216abce8cb03e7794_aug.obj            shape: (5000, 3)\n","file name: 1284876ac0e2371aa4dbb766064f8bbf.obj               shape: (5000, 3)\n","file name: 1c5a350ea0f55f793fbce9ec40e1f047_aug.obj           shape: (5000, 3)\n","file name: 149978eefad83cbafd8e7b05498794b9.obj               shape: (5000, 3)\n","file name: 178382bfcc33146dd141480e2c154d3.obj                shape: (5000, 3)\n","file name: 147889b73fa491d82e877e82c90c24d_aug.obj            shape: (5000, 3)\n","file name: 185059ee821245d176fb25377c3b547e.obj               shape: (5000, 3)\n","file name: 18244d93dbd2afbebda733a39f84326d.obj               shape: (5000, 3)\n","file name: 21ffb9fa5bae1c583ce0d177711e253.obj                shape: (5000, 3)\n","file name: 19d49c8015948b742d60c8689a64d7a0_aug.obj           shape: (5000, 3)\n","file name: 1dd6eb41ad5a1267bda733a39f84326d_aug.obj           shape: (5000, 3)\n","file name: 14d47aa57151ae4baa93570ec0c0afff.obj               shape: (5000, 3)\n","file name: 1ab80bc91a45b7d0a31091d2234b9f68.obj               shape: (5000, 3)\n","file name: 130b1d8d6ded598ef2cdad303f49c9f9_aug.obj           shape: (5000, 3)\n","file name: 193ec1089f0a98a36518e6cd1fbc5fab.obj               shape: (5000, 3)\n","file name: 1dc757e77f3cfad0253c03b7df20edd5_aug.obj           shape: (5000, 3)\n","file name: 1d343a64b4789983c10e9d4ee4bae4f4_aug.obj           shape: (5000, 3)\n","file name: 189cffefcdd5cb071a126804ae24042.obj                shape: (5000, 3)\n","file name: 1714b6e57c8c4983fb1aad5dae793ff4_aug.obj           shape: (5000, 3)\n","file name: 167df2c10c116eb5d61b6a34f3fd808c.obj               shape: (5000, 3)\n","file name: 18caf44713ee788b9313122d0e2587c6.obj               shape: (5000, 3)\n","file name: 11d3ec621322ca723c35e65001c8c258_aug.obj           shape: (5000, 3)\n","file name: 1b2dc43f22ea46013ae58a4b81f41be1.obj               shape: (5000, 3)\n","file name: 17f89c25a3142ee09d2b99af43da16b3.obj               shape: (5000, 3)\n","file name: 1c4f6c884a2132903c35e65001c8c258_aug.obj           shape: (5000, 3)\n","file name: 1d7fd8ff8d68f74ce3ccef60655d5f2d.obj               shape: (5000, 3)\n","file name: 105a77e198fd243eab07f3d736b6f705_aug.obj           shape: (5000, 3)\n","file name: 130b1d8d6ded598ef2cdad303f49c9f9.obj               shape: (5000, 3)\n","file name: 20dd2b72086b5149d536c1ebda275556.obj               shape: (5000, 3)\n","file name: 178382bfcc33146dd141480e2c154d3_aug.obj            shape: (5000, 3)\n","file name: 12a11a800f6869d99ea5c205086e2a63.obj               shape: (5000, 3)\n","file name: 10b59082091513b3e66cabd11ba41eae.obj               shape: (5000, 3)\n","file name: 1ed1a74a5e70539e280b225afd3dc9fd.obj               shape: (5000, 3)\n","file name: 14ace3e8d05f8d21a413908c0e169330.obj               shape: (5000, 3)\n","file name: 22e133c21d752d3f4c73522dbcdc56cf.obj               shape: (5000, 3)\n","file name: 1ad84ebe2ab289c2ccab858630bb6357.obj               shape: (5000, 3)\n","file name: 1fde8f41c6a39c07111f983eb293b51a.obj               shape: (5000, 3)\n","file name: 18aad9d102afbca57ba2273581c30cb_aug.obj            shape: (5000, 3)\n","file name: 1ad84ebe2ab289c2ccab858630bb6357_aug.obj           shape: (5000, 3)\n","file name: 147889b73fa491d82e877e82c90c24d.obj                shape: (5000, 3)\n","file name: 20a3df3de67f309d8e35db9103756ad5_aug.obj           shape: (5000, 3)\n","file name: 1525d96ab2b75980aaa232d0915adae9.obj               shape: (5000, 3)\n","file name: 1964ce6c225fb1a5994a3466f8481f8a.obj               shape: (5000, 3)\n","file name: 1466b91f01aafba9ed3696d854eee1ec.obj               shape: (5000, 3)\n","file name: 1f8aee726cbf44c23d27832ab9ea6d92_aug.obj           shape: (5000, 3)\n","file name: 165e03c012cb5b6c3bb4d660359dfc5_aug.obj            shape: (5000, 3)\n","file name: 15c785a7505992c3a9be8fd09fb14f4f_aug.obj           shape: (5000, 3)\n","file name: 1ad321f067ffbe7e51a95aaa6caba1d3.obj               shape: (5000, 3)\n","file name: 12711a683ffb81bad536c1ebda275556_aug.obj           shape: (5000, 3)\n","file name: 1179e37d657c3eb66436916a86a90ed7_aug.obj           shape: (5000, 3)\n","file name: 1b25c745164e53b822d2fb8fec68f2a1_aug.obj           shape: (5000, 3)\n","file name: 1a1de15e572e039df085b75b20c2db33_aug.obj           shape: (5000, 3)\n","file name: 19c25429d34ce9748c844a5e3a5e1a93.obj               shape: (5000, 3)\n","file name: 1a64bf1e658652ddb11647ffa4306609_aug.obj           shape: (5000, 3)\n","file name: 1768f55a3c29cd483337cb9d908ce86e.obj               shape: (5000, 3)\n","file name: 1328a95d69cefe32f200a72c9245aee7.obj               shape: (5000, 3)\n","file name: 1ed012d3232de232473f10e6caaeca56.obj               shape: (5000, 3)\n","file name: 1ef2d722d005fb46892a3ef1aeeb86fa.obj               shape: (5000, 3)\n","file name: 1b2fb48dfc17b3c0c07426ce19bca2e_aug.obj            shape: (5000, 3)\n","file name: 19186a0accbf7c68ef7b860bd772a37_aug.obj            shape: (5000, 3)\n","file name: 1ac8b8c486a77dbc65db4f1fb47e0c1d_aug.obj           shape: (5000, 3)\n","file name: 1520d7ab01b96a4d2f20449572a3a77c_aug.obj           shape: (5000, 3)\n","file name: 1c3d0cfb621e45fbf8e4e0fd40d76860.obj               shape: (5000, 3)\n","file name: 1a64bf1e658652ddb11647ffa4306609.obj               shape: (5000, 3)\n","file name: 20e01ed9c14d4659e61b9ff60b1be412_aug.obj           shape: (5000, 3)\n","file name: 17b74ace5d2791eeab7ec554b18515bb_aug.obj           shape: (5000, 3)\n","file name: 10f158d2f43926ac80360680c1602c7d.obj               shape: (5000, 3)\n","file name: 1a4337da899da1936909632a947fc19b_aug.obj           shape: (5000, 3)\n","file name: 10c19d45fed88e6984c322bbb3fe1ad.obj                shape: (5000, 3)\n","file name: 13f816dcec3f6363f7e74112dde4b19b.obj               shape: (5000, 3)\n","file name: 212685bfc2a32cd9fe8cfdfb3bfc3376.obj               shape: (5000, 3)\n","file name: 154028cc3c2b4846436916a86a90ed7_aug.obj            shape: (5000, 3)\n","file name: 1b2fb48dfc17b3c0c07426ce19bca2e.obj                shape: (5000, 3)\n","file name: 1782558e47730989b96212c8f6cd06e.obj                shape: (5000, 3)\n","file name: 1b94aad142e6c2b8af9f38a1ee687286.obj               shape: (5000, 3)\n","file name: 1b25c745164e53b822d2fb8fec68f2a1.obj               shape: (5000, 3)\n","file name: 13353d601c189244c23a72fe560e6753_aug.obj           shape: (5000, 3)\n","file name: 19bb8605a7a5233e4d7ac55d461d1984_aug.obj           shape: (5000, 3)\n","file name: 1e8e92f8b3192f4515ceb5e63caaf714_aug.obj           shape: (5000, 3)\n","file name: 19f52dd4592c3fb5531e940de4b7770d.obj               shape: (5000, 3)\n","file name: 1b2ef0809ca1abc7ca92a4cdad802b45_aug.obj           shape: (5000, 3)\n","file name: 15bdc3b07627ea2f6dca8796028a1679.obj               shape: (5000, 3)\n","file name: 14d47aa57151ae4baa93570ec0c0afff_aug.obj           shape: (5000, 3)\n","file name: 18927999d0c5a9687ba2618ede0d52ff.obj               shape: (5000, 3)\n","file name: 18caf44713ee788b9313122d0e2587c6_aug.obj           shape: (5000, 3)\n","file name: 2181653ec5313196d2c8600344d8bfab_aug.obj           shape: (5000, 3)\n","file name: 22c0b90fbda00bb9a3a61aa922ccc66.obj                shape: (5000, 3)\n","file name: 1ebb7511feac4d62381a9e1cee6d0b00.obj               shape: (5000, 3)\n","file name: 1d549e9c44773cb3aa69edcaeea3d6af.obj               shape: (5000, 3)\n","file name: 1da433472693082a3b03cab05e253d9_aug.obj            shape: (5000, 3)\n","file name: 1c14ef4c48b7d95d61c6c61410fc904b.obj               shape: (5000, 3)\n","file name: 1213742aa7815fd0e23d60a1b706b44f_aug.obj           shape: (5000, 3)\n","file name: 105a77e198fd243eab07f3d736b6f705.obj               shape: (5000, 3)\n","file name: 12d463649ed6c176ab98a7077c964a60.obj               shape: (5000, 3)\n","file name: 22e133c21d752d3f4c73522dbcdc56cf_aug.obj           shape: (5000, 3)\n","file name: 1b85c850cb4b93a6e9415adaaf77fdbf.obj               shape: (5000, 3)\n","file name: 167df2c10c116eb5d61b6a34f3fd808c_aug.obj           shape: (5000, 3)\n","file name: 1782558e47730989b96212c8f6cd06e_aug.obj            shape: (5000, 3)\n","file name: 1ef8f98842f2a388a4dbb766064f8bbf.obj               shape: (5000, 3)\n","file name: 18927999d0c5a9687ba2618ede0d52ff_aug.obj           shape: (5000, 3)\n","file name: 1ac8b8c486a77dbc65db4f1fb47e0c1d.obj               shape: (5000, 3)\n","file name: 2181ff0bcb76d33428044fe9244db50a.obj               shape: (5000, 3)\n","file name: 1a63a260180f11baafe717997470b28d_aug.obj           shape: (5000, 3)\n","file name: 15d6cd7877c6601d9ed410a010efa019.obj               shape: (5000, 3)\n","file name: 139718b631cbca546a36136419d55d5c_aug.obj           shape: (5000, 3)\n","file name: 1dbb24dedcb23beab1bb46d2556ba67d_aug.obj           shape: (5000, 3)\n","file name: 1dbb02c20bb93af81c1b3b2ed8d13bf8_aug.obj           shape: (5000, 3)\n","file name: 215da971831129bf63ee8a34069b7c5_aug.obj            shape: (5000, 3)\n","file name: 12d7c4013415ea147f5b0cb87a91de52_aug.obj           shape: (5000, 3)\n","file name: 1548f5fb0684d08c63155b8ebc275bd1_aug.obj           shape: (5000, 3)\n","file name: 12941cb870df79b9815337ac44abb964_aug.obj           shape: (5000, 3)\n","file name: 1b1a7af332f8f154487edd538b3d83f6.obj               shape: (5000, 3)\n","file name: 155cf95c37a3c2c01edf5a868fdffb8d_aug.obj           shape: (5000, 3)\n","file name: 1c4590ebc214e029816bd8f64e08b2bc.obj               shape: (5000, 3)\n","file name: 1beac5e41e17b680fade9f69c520312a.obj               shape: (5000, 3)\n","file name: 16b8c04d29bb4c36b11647ffa4306609_aug.obj           shape: (5000, 3)\n","file name: 16bcbdca2d5911e782dca60c5dad9210.obj               shape: (5000, 3)\n","file name: 1e58b82b7c7c93b3e3e80cf56a92a302_aug.obj           shape: (5000, 3)\n","file name: 198d8e274c59511b36a1a31af8f59.obj                  shape: (5000, 3)\n","file name: 1548f5fb0684d08c63155b8ebc275bd1.obj               shape: (5000, 3)\n","file name: 12a445770f7d6f2b70a43c2d978e502e.obj               shape: (5000, 3)\n","file name: 1213742aa7815fd0e23d60a1b706b44f.obj               shape: (5000, 3)\n","file name: 1fb16b5399a4b3a710bd1697bfc4e3eb.obj               shape: (5000, 3)\n","file name: 12a445770f7d6f2b70a43c2d978e502e_aug.obj           shape: (5000, 3)\n","file name: 1d55c91c862fad6ff96205b49d430ba4.obj               shape: (5000, 3)\n","file name: 1f167c74bca9ec83622a8f038ee88042_aug.obj           shape: (5000, 3)\n","file name: 1d5872004edf12038644d87f4c93cda7_aug.obj           shape: (5000, 3)\n","file name: 109567d7d55b8fe515a520abec2f04dd_aug.obj           shape: (5000, 3)\n","file name: 1d55c91c862fad6ff96205b49d430ba4_aug.obj           shape: (5000, 3)\n","file name: 17ac544cdfbf74b999c8924280047dd9.obj               shape: (5000, 3)\n","file name: 164f9c44717d6cf1dc6ccb06c589ae6a_aug.obj           shape: (5000, 3)\n","file name: 1cf3a0122ae9d45afe58aa5d5c441132_aug.obj           shape: (5000, 3)\n","file name: 125be09e498dcfde55048eb8b7ed14b6_aug.obj           shape: (5000, 3)\n","file name: 164f9c44717d6cf1dc6ccb06c589ae6a.obj               shape: (5000, 3)\n","file name: 1fb16b5399a4b3a710bd1697bfc4e3eb_aug.obj           shape: (5000, 3)\n","file name: 10fda5aa525f6232be8100817bfe3c8a_aug.obj           shape: (5000, 3)\n","file name: 1ffe99aba88ca413ca71c17c1eef7213.obj               shape: (5000, 3)\n","file name: 1ed012d3232de232473f10e6caaeca56_aug.obj           shape: (5000, 3)\n","file name: 191f9cd970e5b0cc174ee7ebab9d8065.obj               shape: (5000, 3)\n","file name: 12b5e4f52c22b348d8499d8846cb4c3b_aug.obj           shape: (5000, 3)\n","file name: 16bcbdca2d5911e782dca60c5dad9210_aug.obj           shape: (5000, 3)\n","file name: 12cd99c20b1a5a932e877e82c90c24d.obj                shape: (5000, 3)\n","file name: 136b0793373b1fc9e9d8921ebe6d5b8e.obj               shape: (5000, 3)\n","file name: 1ef2d722d005fb46892a3ef1aeeb86fa_aug.obj           shape: (5000, 3)\n","file name: 10c19d45fed88e6984c322bbb3fe1ad_aug.obj            shape: (5000, 3)\n","file name: 21411688ce54f56484c8590fa96123c.obj                shape: (5000, 3)\n","file name: 198f9bc1c351c97948c9215ea29b906f.obj               shape: (5000, 3)\n","file name: 1f191e0327ce54474cdd04162f008888.obj               shape: (5000, 3)\n","file name: 15cc37ac9b3b756acfd826dd468a5497.obj               shape: (5000, 3)\n","file name: 10de315497dbce1d5d51c15712538c3c_aug.obj           shape: (5000, 3)\n","file name: 1abeca7159db7ed9f200a72c9245aee7_aug.obj           shape: (5000, 3)\n","file name: 1dc08fb398ba1b389b63159808b36877_aug.obj           shape: (5000, 3)\n","file name: 1ad321f067ffbe7e51a95aaa6caba1d3_aug.obj           shape: (5000, 3)\n","file name: 1cf14b4004e1d2e22c6ce678c9114ba5.obj               shape: (5000, 3)\n","file name: 2254e63f695a1cccbbae182929bb7dd_aug.obj            shape: (5000, 3)\n","file name: 10d388f6f578e4e8851f021b9ed69c58_aug.obj           shape: (5000, 3)\n","file name: 1768f55a3c29cd483337cb9d908ce86e_aug.obj           shape: (5000, 3)\n","file name: 206e39a5f67f4a4a81d0c86cc18e6647.obj               shape: (5000, 3)\n","file name: 1a7b9697be903334b99755e16c4a9d21_aug.obj           shape: (5000, 3)\n","file name: 1b2dc43f22ea46013ae58a4b81f41be1_aug.obj           shape: (5000, 3)\n","file name: 1d2c5ee3b5ef205164bd4e0c23ded276_aug.obj           shape: (5000, 3)\n","file name: 20a3df3de67f309d8e35db9103756ad5.obj               shape: (5000, 3)\n","file name: 22c0b90fbda00bb9a3a61aa922ccc66_aug.obj            shape: (5000, 3)\n","file name: 1179e37d657c3eb66436916a86a90ed7.obj               shape: (5000, 3)\n","file name: 2131d5bcea38ce3a68bdb39538968e8e_aug.obj           shape: (5000, 3)\n","file name: 1a3782ae4bd711b66b418c7d9fedcaa9.obj               shape: (5000, 3)\n","file name: 22cc85ff2ce8213f2ac826a3c82da491_aug.obj           shape: (5000, 3)\n","file name: 1713a1ac8aedcc522b12ea83455b0f44_aug.obj           shape: (5000, 3)\n","file name: 13f816dcec3f6363f7e74112dde4b19b_aug.obj           shape: (5000, 3)\n","Done!\n"]}]},{"cell_type":"code","source":["class FlowFieldPointNet(nn.Module):\n","    \"\"\"\n","    PointNet\n","    reference: PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation\n","    reference: A fast three-dimensional flow field prediction around bluff bodies using deep learning\n","    \"\"\"\n","    def __init__(self, character=1):\n","        super().__init__()\n","        self.input_transform = T_nets(input_shape=3)\n","        self.character = character\n","\n","        self.mlp_1 = nn.Sequential(\n","            nn.Conv1d(3, 128, 1), nn.BatchNorm1d(128), nn.ReLU(),\n","            nn.Conv1d(64, 128, 1), nn.BatchNorm1d(128), nn.ReLU(),\n","            nn.Conv1d(128, 128, 1), nn.BatchNorm1d(128), nn.ReLU(),\n","            nn.Conv1d(128, 128, 1), nn.BatchNorm1d(128), nn.ReLU()\n","        )\n","\n","        self.mlp_2 = nn.Sequential(\n","            nn.Conv1d(128, 128, 1), nn.BatchNorm1d(128), nn.ReLU(),\n","            nn.Conv1d(128, 256, 1), nn.BatchNorm1d(256), nn.ReLU(),\n","            nn.Conv1d(256, 1024, 1), nn.BatchNorm1d(1024), nn.ReLU(),\n","            nn.Conv1d(1024, 2048, 1), nn.BatchNorm1d(2048), nn.ReLU()\n","        )\n","\n","        self.mlp_3 = nn.Sequential(\n","            nn.Conv1d(2176, 1024, 1), nn.BatchNorm1d(1024), nn.ReLU(),\n","            nn.Dropout(p=0.4),\n","            nn.Conv1d(1024, 512, 1), nn.BatchNorm1d(512), nn.ReLU(),\n","            nn.Dropout(p=0.4),\n","            nn.Conv1d(512, 256, 1), nn.BatchNorm1d(256), nn.ReLU(),\n","            nn.Dropout(p=0.4),\n","            nn.Conv1d(256, 128, 1), nn.BatchNorm1d(128), nn.ReLU(),\n","            nn.Dropout(p=0.4),\n","            nn.Conv1d(128, 128, 1), nn.BatchNorm1d(128), nn.ReLU(),\n","            nn.Dropout(p=0.4),\n","        )\n","\n","        self.final_layer = nn.Sequential(\n","            nn.Conv1d(128, character, 1)\n","        )\n","\n","        self.feature_transform = T_nets(input_shape=128)\n","\n","    def forward(self, x: torch.Tensor):\n","        batch_size = x.size(0)\n","        points = x.size(2)\n","        input_transform = self.input_transform(x)\n","        x = x.transpose(2, 1)\n","        x = torch.bmm(x, input_transform)\n","        x = x.transpose(2, 1)\n","\n","        \"\"\"first MLP\"\"\"\n","        x = self.mlp_1(x)\n","\n","        \"\"\"feature transform\"\"\"\n","        feature_transform = self.feature_transform(x)\n","        x = x.transpose(2, 1)\n","        x = torch.bmm(x, feature_transform)\n","        x = x.transpose(2, 1)\n","        x1 = x\n","\n","        \"\"\"second MLP\"\"\"\n","        x = self.mlp_2(x)\n","\n","        \"\"\"max pool\"\"\"\n","        x = torch.max(x, 2, keepdim=True)[0]\n","\n","        \"\"\"concatenation\"\"\"\n","        x = x.view(-1, 2048, 1).repeat(1, 1, points)\n","        x = torch.cat([x, x1], 1)\n","\n","        \"\"\"final MLP\"\"\"\n","        x = self.mlp_3(x)\n","\n","        \"\"\"final layer\"\"\"\n","        x = self.final_layer(x)\n","        x = x.transpose(2, 1).contiguous()\n","        x = x.view(batch_size, points, self.character)\n","        return x, input_transform, feature_transform\n","\n","\n","class T_nets(nn.Module):\n","    def __init__(self, input_shape: int):\n","        super().__init__()\n","\n","        self.k = input_shape\n","\n","        \"\"\"first MLP\"\"\"\n","        self.conv1 = nn.Conv1d(input_shape, 64, 1)\n","        self.conv2 = nn.Conv1d(64, 128, 1)\n","        self.conv3 = nn.Conv1d(128, 1024, 1)\n","\n","        self.bn1 = nn.BatchNorm1d(64)\n","        self.bn2 = nn.BatchNorm1d(128)\n","        self.bn3 = nn.BatchNorm1d(1024)\n","\n","        \"\"\"last MLP\"\"\"\n","        self.fc1 = nn.Linear(1024, 512)\n","        self.fc2 = nn.Linear(512, 256)\n","        self.fc3 = nn.Linear(256, input_shape * input_shape)\n","\n","        self.bn4 = nn.BatchNorm1d(512)\n","        self.bn5 = nn.BatchNorm1d(256)\n","\n","    def forward(self, x: torch.Tensor) -> torch.Tensor:\n","        batch_size = x.size()[0]\n","        x = F.relu(self.bn1(self.conv1(x)))\n","        x = F.relu(self.bn2(self.conv2(x)))\n","        x = F.relu(self.bn3(self.conv3(x)))\n","        x = torch.max(x, 2, keepdim=True)[0]\n","        x = x.view(-1, 1024)\n","\n","        x = F.relu(self.bn4(self.fc1(x)))\n","        x = F.relu(self.bn5(self.fc2(x)))\n","        x = self.fc3(x)\n","\n","        identity_matrix = (torch.from_numpy(\n","            np.eye(self.k).flatten().astype(np.float32)).view(\n","            1, self.k * self.k).repeat(batch_size, 1))\n","        if x.is_cuda:\n","            identity_matrix = identity_matrix.cuda()\n","        x = x + identity_matrix\n","        x = x.view(-1, self.k, self.k)\n","        return x\n","\n","\"\"\"FlowFieldPointNet 2\"\"\"\n","class Lambda(nn.Module):\n","    def __init__(self, func: Callable[[torch.Tensor], torch.Tensor]):\n","        super().__init__()\n","        self.func = func\n","\n","    def forward(self, x: torch.Tensor) -> torch.Tensor:\n","        return self.func(x)\n","\n","\n","class T_nets_2(nn.Module):\n","    def __init__(self, input_shape: int = 3):\n","        super().__init__()\n","        self.k = input_shape\n","        \"\"\"first MLP\"\"\"\n","        self.mlp1 = nn.Sequential(\n","            nn.Linear(self.k, 64), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.BatchNorm1d(64), nn.ReLU(), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.Linear(64, 128), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.BatchNorm1d(128), nn.ReLU(), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.Linear(128, 1024), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.BatchNorm1d(1024), nn.ReLU(), Lambda(lambda x: x.permute(0, 2, 1)),\n","        )\n","        \"\"\"last MLP\"\"\"\n","        self.mlp2 = nn.Sequential(\n","            nn.Linear(1024, 512), nn.BatchNorm1d(512), nn.ReLU(),\n","            nn.Linear(512, 256), nn.BatchNorm1d(256), nn.ReLU(),\n","            nn.Linear(256, self.k * self.k),\n","        )\n","\n","    def forward(self, x: torch.Tensor) -> torch.Tensor:\n","        batch_size = x.size()[0]\n","        x = self.mlp1(x)\n","        x = torch.max(x, dim=1, keepdim=True)[0]\n","        x = x.view(-1, 1024)\n","        x = self.mlp2(x)\n","        iden = (torch.from_numpy(np.eye(self.k).flatten().astype(\n","            np.float32\n","        )).view(1, self.k * self.k).repeat(batch_size, 1))\n","        if x.is_cuda:\n","            iden = iden.cuda()\n","        x = x + iden\n","        x = x.view(-1, self.k, self.k)\n","        return x\n","\n","\n","class FlowFieldPointNet_2(nn.Module):\n","    def __init__(self, character=1):\n","        super().__init__()\n","        self.input_transform = T_nets_2(input_shape=3)\n","        self.character = character\n","\n","        self.mlp_1 = nn.Sequential(\n","            nn.Linear(3, 128), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.BatchNorm1d(128), nn.ReLU(), Lambda(lambda x: x.permute(0, 2, 1)),\n","\n","            nn.Linear(128, 128), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.BatchNorm1d(128), nn.ReLU(), Lambda(lambda x: x.permute(0, 2, 1)),\n","\n","            nn.Linear(128, 128), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.BatchNorm1d(128), nn.ReLU(), Lambda(lambda x: x.permute(0, 2, 1)),\n","\n","            nn.Linear(128, 128), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.BatchNorm1d(128), nn.ReLU(), Lambda(lambda x: x.permute(0, 2, 1)),\n","        )\n","\n","        self.mlp_2 = nn.Sequential(\n","            nn.Linear(128, 128), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.BatchNorm1d(128), nn.ReLU(), Lambda(lambda x: x.permute(0, 2, 1)),\n","\n","            nn.Linear(128, 256), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.BatchNorm1d(256), nn.ReLU(), Lambda(lambda x: x.permute(0, 2, 1)),\n","\n","            nn.Linear(256, 1024), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.BatchNorm1d(1024), nn.ReLU(), Lambda(lambda x: x.permute(0, 2, 1)),\n","\n","            nn.Linear(1024, 2048), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.BatchNorm1d(2048), nn.ReLU(), Lambda(lambda x: x.permute(0, 2, 1)),\n","        )\n","\n","        self.mlp_3 = nn.Sequential(\n","            nn.Linear(2176, 1024), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.BatchNorm1d(1024), nn.ReLU(), nn.Dropout(p=0.4), Lambda(lambda x: x.permute(0, 2, 1)),\n","\n","            nn.Linear(1024, 512), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.BatchNorm1d(512), nn.ReLU(), nn.Dropout(p=0.4), Lambda(lambda x: x.permute(0, 2, 1)),\n","\n","            nn.Linear(512, 256), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.BatchNorm1d(256), nn.ReLU(), nn.Dropout(p=0.4), Lambda(lambda x: x.permute(0, 2, 1)),\n","\n","            nn.Linear(256, 128), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.BatchNorm1d(128), nn.ReLU(), nn.Dropout(p=0.4), Lambda(lambda x: x.permute(0, 2, 1)),\n","\n","            nn.Linear(128, 128), Lambda(lambda x: x.permute(0, 2, 1)),\n","            nn.BatchNorm1d(128), nn.ReLU(), nn.Dropout(p=0.4), Lambda(lambda x: x.permute(0, 2, 1)),\n","        )\n","\n","        self.final_layer = nn.Sequential(\n","            nn.Linear(128, character),\n","        )\n","\n","        self.feature_transform = T_nets_2(input_shape=128)\n","\n","    def forward(self, x: torch.Tensor):\n","        batch_size = x.size(0)\n","        points = x.size(1)\n","        input_transform = self.input_transform(x)\n","        x = torch.bmm(x, input_transform)\n","\n","        \"\"\"first MLP\"\"\"\n","        x = self.mlp_1(x)\n","\n","        \"\"\"feature transform\"\"\"\n","        feature_transform = self.feature_transform(x)\n","        x = torch.bmm(x, feature_transform)\n","        x1 = x\n","\n","        \"\"\"second MLP\"\"\"\n","        x = self.mlp_2(x)\n","\n","        \"\"\"max pool\"\"\"\n","        x = torch.max(x, 1, keepdim=True)[0]\n","\n","        \"\"\"concatenation\"\"\"\n","        x = x.view(-1, 1, 2048).repeat(1, points, 1)\n","        x = torch.cat([x, x1], 2)\n","\n","        \"\"\"final MLP\"\"\"\n","        x = self.mlp_3(x)\n","\n","        \"\"\"final layer\"\"\"\n","        x = self.final_layer(x)\n","        x = x.view(batch_size, points, self.character)\n","        return x, input_transform, feature_transform\n","\n","\n","\"\"\"\n","DGCNN\n","reference: Dynamic Graph CNN for Learning on Point Clouds\n","reference: https://github.com/Mohamedelrefaie/DrivAerNet/blob/main/DrivAerNet_v1/RegDGCNN/model.py\n","\"\"\"\n","\n","\n","def knn(x: torch.Tensor, k: int) -> torch.Tensor:\n","    inner = -2 * torch.matmul(x.transpose(2, 1), x)\n","    xx = torch.sum(x ** 2, dim=1, keepdim=True)\n","    pairwise_distance = -xx - inner -xx.transpose(2, 1)\n","    idx = pairwise_distance.topk(k=k, dim=-1)[1]\n","    return idx\n","\n","\n","def get_graph_feature(x: torch.Tensor, k: int = 20, idx: torch.Tensor = None):\n","    batch_size = x.size(0)\n","    num_points = x.size(2)\n","    x = x.view(batch_size, -1, num_points)\n","    if idx is None:\n","        idx = knn(x, k=k)\n","    device = x.device\n","    idx_base = torch.arange(0, batch_size, device=device).view(-1, 1, 1) * num_points\n","    idx = idx + idx_base\n","    idx = idx.view(-1)\n","    _, num_dims, _ = x.size()\n","    x = x.transpose(2, 1).contiguous()\n","    feature = x.view(batch_size * num_points, -1)[idx, :]\n","    feature = feature.view(batch_size, num_points, k, num_dims)\n","    x = x.view(batch_size, num_points, 1, num_dims).repeat(1, 1, k, 1)\n","    feature = torch.cat((feature - x, x), dim=3).permute(0, 3, 1, 2).contiguous()\n","    return feature\n","\n","\n","class AeroDGCNN(nn.Module):\n","    def __init__(self, args: dict):\n","        super().__init__()\n","        self.args = args\n","        self.k = args['k']\n","        self.edgeconv1 = nn.Sequential(\n","            nn.Conv2d(6, 64, kernel_size=1, bias=False), nn.BatchNorm2d(64),\n","            nn.LeakyReLU(negative_slope=0.2),\n","            nn.Conv2d(64, 128, kernel_size=1, bias=False), nn.BatchNorm2d(128),\n","            nn.LeakyReLU(negative_slope=0.2)\n","        )\n","        self.edgeconv2 = nn.Sequential(\n","            nn.Conv2d(128 * 2, 128, kernel_size=1, bias=False), nn.BatchNorm2d(128),\n","            nn.LeakyReLU(negative_slope=0.2),\n","            nn.Conv2d(128, 128, kernel_size=1, bias=False), nn.BatchNorm2d(128),\n","            nn.LeakyReLU(negative_slope=0.2)\n","        )\n","        self.edgeconv3 = nn.Sequential(\n","            nn.Conv2d(128 * 2, 256, kernel_size=1, bias=False), nn.BatchNorm2d(256),\n","            nn.LeakyReLU(negative_slope=0.2),\n","            nn.Conv2d(256, 256, kernel_size=1, bias=False), nn.BatchNorm2d(256),\n","            nn.LeakyReLU(negative_slope=0.2)\n","        )\n","        self.mlp_1 = nn.Sequential(\n","            nn.Conv1d(512, 512, kernel_size=1, bias=False), nn.BatchNorm1d(512),\n","            nn.LeakyReLU(negative_slope=0.2),\n","            nn.Conv1d(512, 1024, kernel_size=1, bias=False), nn.BatchNorm1d(1024),\n","            nn.LeakyReLU(negative_slope=0.2)\n","        )\n","        self.mlp_2 = nn.Sequential(\n","            nn.Conv1d(1536, 1024, kernel_size=1, bias=False), nn.BatchNorm1d(1024),\n","            nn.LeakyReLU(negative_slope=0.2), nn.Dropout(p=0.4),\n","            nn.Conv1d(1024, 512, kernel_size=1, bias=False), nn.BatchNorm1d(512),\n","            nn.LeakyReLU(negative_slope=0.2), nn.Dropout(p=0.4),\n","            nn.Conv1d(512, 256, kernel_size=1, bias=False), nn.BatchNorm1d(256),\n","            nn.LeakyReLU(negative_slope=0.2), nn.Dropout(p=0.4),\n","            nn.Conv1d(256, 128, kernel_size=1, bias=False), nn.BatchNorm1d(128),\n","            nn.LeakyReLU(negative_slope=0.2), nn.Dropout(p=0.4),\n","            nn.Conv1d(128, 64, kernel_size=1, bias=False), nn.BatchNorm1d(64),\n","            nn.LeakyReLU(negative_slope=0.2), nn.Dropout(p=0.4),\n","            nn.Conv1d(64, 1, kernel_size=1, bias=False)\n","        )\n","\n","    def forward(self, x: torch.Tensor) -> torch.Tensor:\n","        batch_size = x.size(0)\n","        points = x.size(2)\n","        \"\"\"edgeconv 1\"\"\"\n","        x = get_graph_feature(x, k=self.k)\n","        x = self.edgeconv1(x)\n","        x1 = x.max(dim=-1, keepdim=False)[0]\n","        \"\"\"edgeconv 2\"\"\"\n","        x = get_graph_feature(x1, k=self.k)\n","        x = self.edgeconv2(x)\n","        x2 = x.max(dim=-1, keepdim=False)[0]\n","        \"\"\"edgeconv 3\"\"\"\n","        x = get_graph_feature(x2, k=self.k)\n","        x = self.edgeconv3(x)\n","        x3 = x.max(dim=-1, keepdim=False)[0]\n","        \"\"\"concate 1\"\"\"\n","        x = torch.cat((x1, x2, x3), dim=1)\n","        x = self.mlp_1(x)\n","        \"\"\"max pooling\"\"\"\n","        x = F.adaptive_max_pool1d(x, 1)\n","        \"\"\"repeat\"\"\"\n","        x = x.repeat(1, 1, points)\n","        \"\"\"concate 2\"\"\"\n","        x = torch.cat((x, x1, x2, x3), dim=1)\n","        \"\"\"mlp 2\"\"\"\n","        x = self.mlp_2(x)\n","        if self.args['train_cd']:\n","            x = x.view(batch_size, -1)\n","            x = torch.mean(x, dim=1, keepdim=True)\n","        return x\n"],"metadata":{"id":"Z6reJq2y4z5P","executionInfo":{"status":"ok","timestamp":1726139064263,"user_tz":-480,"elapsed":370,"user":{"displayName":"王宇哲","userId":"05854028536713312921"}}},"execution_count":9,"outputs":[]},{"cell_type":"code","source":["\"\"\"训练函数\"\"\"\n","def read_vtk(file_path):\n","    \"\"\"读取vtk文件的数据: 点云、表面压力、速度等\"\"\"\n","    reader = vtk.vtkUnstructuredGridReader()\n","    reader.SetFileName(file_path)\n","    reader.Update()\n","    polydata = reader.GetOutput()\n","    return reader, polydata\n","\n","\n","def nodes(polydata):\n","    points = vtk_to_numpy(polydata.GetPoints().GetData()).astype(np.float32)\n","    return points\n","\n","\n","def velocity(polydata):\n","    vel = vtk_to_numpy(polydata.GetPointData().GetArray(\"point_vectors\")).astype(np.float32)\n","    return vel\n","\n","\n","def pressure(polydata):\n","    press = vtk_to_numpy(polydata.GetPointData().GetArray(\"point_scalars\")).astype(np.float32)\n","    return press\n","\n","\n","def read_obj(file_path):\n","    reader = vtk.vtkOBJReader()\n","    reader.SetFileName(file_path)\n","    reader.Update()\n","    polydata = reader.GetOutput()\n","    return reader, polydata\n","\n","\n","class PressureDataset(Dataset):\n","    \"\"\"读取表面压力\"\"\"\n","    def __init__(self, data_path: str, index_path: str):\n","        self.data_path = data_path\n","        self.index = pd.read_excel(index_path)\n","\n","    def __len__(self) -> int:\n","        return len(self.index)\n","\n","    def __getitem__(self, idx: int):\n","        index = self.index.iloc[idx, 0]\n","        data = os.path.join(self.data_path, f\"mesh_{index:03}.ply\")\n","        press_path = os.path.join(\"/content/Training/Dataset_1/Label_File\", f\"press_{index:03}.npy\")\n","        pcd = o3d.io.read_point_cloud(data)\n","        pcd_np = np.asarray(pcd.points)\n","\n","        press = np.load(press_path)\n","        press = np.concatenate((press[0:16], press[112:]), axis=0)\n","        return torch.tensor(pcd_np, dtype=torch.float32), torch.tensor(press, dtype=torch.float32)\n","\n","\n","class VelocityDataset(Dataset):\n","    \"\"\"读取速度\"\"\"\n","    def __init__(self, data_path: str, index_path: str):\n","        self.data_path = data_path\n","        self.index = pd.read_excel(index_path)\n","\n","    def __len__(self) -> int:\n","        return len(self.index)\n","\n","    def __getitem__(self, idx: int):\n","        index = self.index.iloc[idx, 0]\n","        data = os.path.join(self.data_path, f\"vel_{index:03}.vtk\")\n","        _, polydata = read_vtk(data)\n","        points = nodes(polydata)\n","        vel = velocity(polydata)\n","        return (torch.tensor(points, dtype=torch.float32),\n","            torch.tensor(vel, dtype=torch.float32))\n","\n","\n","class CdDataset(Dataset):\n","    \"\"\"读取风阻系数\"\"\"\n","    def __init__(self, data_path: str, index_path: str, d2_dict: dict):\n","        self.data_path = data_path\n","        self.index = pd.read_excel(index_path)\n","        self.d2_dict = d2_dict\n","\n","    def __len__(self) -> int:\n","        return len(self.index)\n","\n","    def __getitem__(self, idx: int):\n","        index = self.index.iloc[idx, 0]\n","        obj_name = self.d2_dict[index][0]\n","        cd_label = self.d2_dict[index][1]\n","        data = os.path.join(self.data_path, f\"{obj_name}.npy\")\n","        points = np.load(data)\n","        return torch.tensor(points, dtype=torch.float32), torch.tensor(cd_label, dtype=torch.float32)\n","\n","\n","def T_nets_regularizer(transform: torch.Tensor, device: torch.device) -> torch.Tensor:\n","    d = transform.size()[1]\n","    i = torch.eye(d)[None, :, :]\n","    if transform.is_cuda:\n","        i = i.to(device)\n","    loss = torch.mean(\n","        torch.linalg.matrix_norm(\n","            torch.bmm(transform, transform.transpose(2, 1)) - i, dim=(1, 2)))\n","    return loss\n","\n","\n","def setup_seed(seed: int):\n","  torch.manual_seed(seed)\n","  torch.cuda.manual_seed_all(seed)\n","  np.random.seed(seed)\n","\n","\n","def r2_score(output: torch.Tensor, target: torch.Tensor) -> torch.Tensor:\n","    target_mean = torch.mean(target)\n","    sst = torch.sum((target - target_mean) ** 2)\n","    sse = torch.sum((target - output) ** 2)\n","    r2 = 1 - sse / sst\n","    return r2\n","\n","\n","class LPLoss:\n","    def __init__(self, d=2, p=2, size_average=True, reduction=True):\n","        assert d > 0 and p > 0\n","        self.d = d\n","        self.p = p\n","        self.reduction = reduction\n","        self.size_average = size_average\n","\n","    def abs(self, x, y):\n","        num_examples = x.size(0)\n","        h = 1.0 / (x.size(1) - 1.0)\n","        all_norms = (h ** (self.d / self.p)) * torch.norm(\n","            x.reshape((num_examples, -1)) - y.reshape((num_examples, -1)), self.p, 1\n","        )\n","        if self.reduction:\n","            if self.size_average:\n","                return torch.mean(all_norms)\n","            else:\n","                return torch.sum(all_norms)\n","        return all_norms\n","\n","    def rel(self, x, y):\n","        diff_norms = torch.norm(x-y, 2)\n","        y_norms = torch.norm(y, self.p)\n","        if self.reduction:\n","            if self.size_average:\n","                return torch.mean(diff_norms / y_norms)\n","            else:\n","                return torch.sum(diff_norms / y_norms)\n","        return diff_norms / y_norms\n","\n","    def __call__(self, x, y):\n","        return self.rel(x, y)\n","\n","\n","def get_dataloaders(train_data_path: str, train_index: str,\n","          valid_index: str, batch_size: int, num_works: int,\n","          dataset_type: str, d2_dict: dict = None):\n","    if dataset_type == \"press\":\n","        train_dataset = PressureDataset(train_data_path, train_index)\n","        valid_dataset = PressureDataset(train_data_path, valid_index)\n","    elif dataset_type == \"velocity\":\n","        train_dataset = VelocityDataset(train_data_path, train_index)\n","        valid_dataset = VelocityDataset(train_data_path, valid_index)\n","    elif dataset_type == \"cd\":\n","        train_dataset = CdDataset(train_data_path, train_index, d2_dict)\n","        valid_dataset = CdDataset(train_data_path, valid_index, d2_dict)\n","    train_dataloader = DataLoader(train_dataset, batch_size=batch_size,\n","                    shuffle=True, drop_last=True, num_workers=num_works)\n","    valid_dataloader = DataLoader(valid_dataset, batch_size=batch_size,\n","                    shuffle=False, drop_last=True, num_workers=num_works)\n","    return train_dataloader, valid_dataloader\n","\n","\n","def train_and_evaluate(model: torch.nn.Module,\n","            train_dataloader: DataLoader,\n","            val_dataloader: DataLoader, config: dict,\n","            device: torch.device):\n","    training_start_time = time.time()\n","    optimizer = optim.Adam(model.parameters(), lr=config['lr'],\n","                weight_decay=config['weight decay'], eps=1e-4)\n","    scheduler = ReduceLROnPlateau(optimizer, 'min', patience=20, factor=0.1)\n","    train_losses, valid_losses = [], []\n","    loss_fn = LPLoss()\n","    for epoch in range(config['epochs']):\n","        current_lr = scheduler.get_last_lr()\n","        epoch_start_time = time.time()\n","        model.train()\n","        total_loss, total_mae, total_r2, total_l2 = 0, 0, 0, 0\n","        for data, targets in train_dataloader:\n","            data, targets = data.to(device), targets.to(device).squeeze()\n","            if config['train_type'] != 'velocity':\n","                data = data.permute(0, 2, 1)\n","            optimizer.zero_grad()\n","            if config['train_type'] == 'velocity':\n","                outputs, input_trans, feature_trans = model(data)\n","                loss_l2 = loss_fn(outputs.squeeze(), targets) + T_nets_regularizer(feature_trans, device) * 0.001\n","                loss = F.mse_loss(outputs.squeeze(), targets)\n","            else:\n","                outputs = model(data)\n","                loss_l2 = loss_fn(outputs.squeeze(), targets)\n","                loss = F.mse_loss(outputs.squeeze(), targets)\n","            r2 = r2_score(outputs.squeeze(), targets)\n","            mae = F.l1_loss(outputs.squeeze(), targets)\n","            if config['train_type'] == 'velocity' or config['train_type'] == 'cd':\n","                loss_l2.backward()\n","            else:\n","                loss.backward()\n","            optimizer.step()\n","            total_loss += loss.item()\n","            total_mae += mae.item()\n","            total_r2 += r2.item()\n","            total_l2 += loss_l2.item()\n","\n","        epoch_duration = time.time() - epoch_start_time\n","        avg_loss = total_loss / len(train_dataloader)\n","        avg_mae = total_mae / len(train_dataloader)\n","        avg_r2 = total_r2 / len(train_dataloader)\n","        avg_l2 = total_l2 / len(train_dataloader)\n","        train_losses.append(avg_loss)\n","        print(\"Epoch {:<4} Train L2: {:<10.4f} MSE: {:<20.4f} MAE: {:<10.4f} R2: {:<10.4f} Time: {:<5.2f}s  Current Learning Rate:{}\"\n","           .format(epoch + 1, avg_l2, avg_loss, avg_mae, avg_r2, epoch_duration, current_lr))\n","        model.eval()\n","        val_loss, val_mae, val_r2, val_l2 = 0, 0, 0, 0\n","        inference_times = []\n","        with torch.no_grad():\n","            for data, targets in val_dataloader:\n","                inference_start_time = time.time()\n","                data, targets = data.to(device), targets.to(device).squeeze()\n","                if config['train_type'] != 'velocity':\n","                    data = data.permute(0, 2, 1)\n","                if config['train_type'] == 'velocity':\n","                    outputs, _, _ = model(data)\n","                else:\n","                    outputs = model(data)\n","                loss_l2 = loss_fn(outputs.squeeze(), targets)\n","                val_l2 += loss_l2.item()\n","                loss = F.mse_loss(outputs.squeeze(), targets)\n","                val_loss += loss.item()\n","                mae = F.l1_loss(outputs.squeeze(), targets)\n","                val_mae += mae.item()\n","                r2 = r2_score(outputs.squeeze(), targets)\n","                val_r2 += r2.item()\n","                inference_duration = time.time() - inference_start_time\n","                inference_times.append(inference_duration)\n","\n","        avg_val_loss = val_loss / len(val_dataloader)\n","        avg_mae_loss = val_mae / len(val_dataloader)\n","        avg_val_r2 = val_r2 / len(val_dataloader)\n","        avg_val_l2 = val_l2 / len(val_dataloader)\n","        valid_losses.append(avg_val_loss)\n","        avg_inference_time = sum(inference_times) / len(inference_times)\n","        print(\"Epoch {:<4} Valid L2: {:<10.4f} MSE: {:<20.4f} MAE: {:<10.4f} R2: {:<10.4f} Time: {:.2f}s\"\n","           .format(epoch + 1, avg_val_l2, avg_val_loss, avg_mae_loss, avg_val_r2, avg_inference_time))\n","        scheduler.step(avg_val_loss)\n","\n","    training_duration = time.time() - training_start_time\n","    print(f\"Total training time: {training_duration:.2f}s\")\n","    model_path = os.path.join(\"/content\", config[\"exp_name\"]+\"_final_model.pth\")\n","    torch.save(model.state_dict(), model_path)"],"metadata":{"id":"-1wU43XF464J","executionInfo":{"status":"ok","timestamp":1726139073020,"user_tz":-480,"elapsed":2,"user":{"displayName":"王宇哲","userId":"05854028536713312921"}}},"execution_count":10,"outputs":[]},{"cell_type":"code","source":["\"\"\"训练pressure\"\"\"\n","torch.cuda.empty_cache()\n","config = {\n","    'train_press_vel_path': \"/content/Training/Dataset_1/Feature_File\",\n","    'batch size': 10,\n","    'k': 40,\n","    'num works': 12,\n","    'seed': 32,\n","    'lr': 0.001,\n","    'weight decay': 1e-4,\n","    'epochs': 250,\n","    'train_type': 'press',\n","    'exp_name': \"AeroDGCNN_press\",\n","    'train_index': \"/content/d1_train_index.xlsx\",\n","    'valid_index': \"/content/d1_valid_index.xlsx\",\n","    'train_cd': False,\n","}\n","device = torch.device('cuda')\n","model = AeroDGCNN(config).to(device)\n","train_dataloader, valid_dataloader = get_dataloaders(config['train_press_vel_path'],\n","                            config['train_index'],\n","                            config['valid_index'],\n","                            config['batch size'],\n","                            config['num works'],\n","                            \"press\")\n","train_and_evaluate(model, train_dataloader, valid_dataloader, config, device)\n","\n","\"\"\"训练velocity\"\"\"\n","torch.cuda.empty_cache()\n","config = {\n","    'train_press_vel_path': \"/content/Training/Dataset_1/Feature_File\",\n","    'batch size': 8,\n","    'num works': 12,\n","    'seed': 32,\n","    'lr': 0.001,\n","    'weight decay': 1e-4,\n","    'epochs': 250,\n","    'exp_name': \"FlowField_velocity\",\n","    'train_type': 'velocity',\n","    'train_index': \"/content/d1_train_index.xlsx\",\n","    'valid_index': \"/content/d1_valid_index.xlsx\",\n","    'train_cd': False,\n","}\n","device = torch.device('cuda')\n","model = FlowFieldPointNet_2(character=3).to(device)\n","train_dataloader, valid_dataloader = get_dataloaders(config['train_press_vel_path'],\n","                            config['train_index'],\n","                            config['valid_index'],\n","                            config['batch size'],\n","                            config['num works'],\n","                            \"velocity\")\n","train_and_evaluate(model, train_dataloader, valid_dataloader, config, device)\n","\n","\"\"\"训练CD\"\"\"\n","torch.cuda.empty_cache()\n","dataset2_index_path = \"/content/dataset2_train_label.csv\"\n","d2_inf = {}\n","for i in range(1, 501):\n","    d2_index_inf = np.loadtxt(dataset2_index_path, delimiter=\",\", dtype=str)[:, 0][i].astype(np.int16)\n","    d2_name_inf = np.loadtxt(dataset2_index_path, delimiter=\",\", dtype=str, encoding='utf-8')[:, 1][i]\n","    d2_cd_inf = np.loadtxt(dataset2_index_path, delimiter=\",\", dtype=str)[:, 2][i].astype(np.float32)\n","    d2_inf[d2_index_inf] = [d2_name_inf, d2_cd_inf]\n","\n","config = {\n","    'train_cd_path': \"/content/d2_npy_file\",\n","    'train_index': \"/content/d2_train_index.xlsx\",\n","    'valid_index': \"/content/d2_valid_index.xlsx\",\n","    'batch size': 8,\n","    'num works': 12,\n","    'k': 40,\n","    'seed': 32,\n","    'lr': 0.001,\n","    'weight decay': 1e-4,\n","    'epochs': 250,\n","    'exp_name': \"AeroDGCNN_cd\",\n","    'train_cd': True,\n","    'train_type': 'cd',\n","}\n","\n","device = torch.device('cuda')\n","model = AeroDGCNN(config).to(device)\n","train_dataloader, valid_dataloader = get_dataloaders(config['train_cd_path'],\n","                            config['train_index'],\n","                            config['valid_index'],\n","                            config['batch size'],\n","                            config['num works'],\n","                            \"cd\", d2_inf)\n","train_and_evaluate(model, train_dataloader, valid_dataloader, config, device)\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"fBA-bdQb5Vc8","executionInfo":{"status":"ok","timestamp":1726139239717,"user_tz":-480,"elapsed":144069,"user":{"displayName":"王宇哲","userId":"05854028536713312921"}},"outputId":"5966a6ed-0cf2-4fff-b480-ccc535259a26"},"execution_count":11,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1    Train L2: 0.9607     MSE: 3409.1809            MAE: 51.0838    R2: -0.4757    Time: 12.54s  Current Learning Rate:[0.001]\n","Epoch 1    Valid L2: 0.9624     MSE: 3363.6681            MAE: 51.0354    R2: -0.4586    Time: 0.10s\n","Epoch 2    Train L2: 0.9232     MSE: 3149.9825            MAE: 49.6236    R2: -0.3649    Time: 9.68 s  Current Learning Rate:[0.001]\n","Epoch 2    Valid L2: 0.9151     MSE: 3040.2967            MAE: 49.0654    R2: -0.3186    Time: 0.10s\n","Total training time: 25.46s\n","Epoch 1    Train L2: 0.9544     MSE: 90.6195              MAE: 5.7168     R2: -0.1407    Time: 39.27s  Current Learning Rate:[0.001]\n","Epoch 1    Valid L2: 0.8924     MSE: 89.3563              MAE: 5.6404     R2: -0.1180    Time: 0.24s\n","Epoch 2    Train L2: 0.7068     MSE: 54.8254              MAE: 4.4769     R2: 0.3105     Time: 39.65s  Current Learning Rate:[0.001]\n","Epoch 2    Valid L2: 0.5959     MSE: 39.8684              MAE: 3.7979     R2: 0.5008     Time: 0.24s\n","Total training time: 85.84s\n","Epoch 1    Train L2: 0.2911     MSE: 0.0264               MAE: 0.1017     R2: -7.8800    Time: 13.68s  Current Learning Rate:[0.001]\n","Epoch 1    Valid L2: 0.2288     MSE: 0.0088               MAE: 0.0821     R2: -2.1473    Time: 0.12s\n","Epoch 2    Train L2: 0.1435     MSE: 0.0038               MAE: 0.0492     R2: -0.0673    Time: 13.97s  Current Learning Rate:[0.001]\n","Epoch 2    Valid L2: 0.3696     MSE: 0.0224               MAE: 0.1395     R2: -8.1981    Time: 0.12s\n","Total training time: 30.70s\n"]}]},{"cell_type":"code","source":["test_save_path = \"/content/outputs\"\n","os.makedirs(test_save_path, exist_ok=True)\n","\"\"\"输出预测表面压力\"\"\"\n","torch.cuda.empty_cache()\n","config = {\n","    'k': 40,\n","    'train_cd': False,\n","}\n","setup_seed(32)\n","dataset1_path = \"/content/Test/Dataset_1/Feature_File\"\n","device = torch.device('cuda')\n","model = AeroDGCNN(config).to(device)\n","model.load_state_dict(torch.load('/content/AeroDGCNN_press_final_model.pth', weights_only=True))\n","model.eval()\n","with torch.no_grad():\n","    for file in os.listdir(dataset1_path):\n","        if file[0:4] == \"mesh\":\n","            number = int(file[5:8])\n","            data = os.path.join(dataset1_path, file)\n","            pcd = o3d.io.read_point_cloud(data)\n","            points = np.asarray(pcd.points)\n","            points = torch.tensor(points, dtype=torch.float32).to(device)\n","            points = points.unsqueeze(0)\n","            points = points.permute(0, 2, 1)\n","            pressure = model(points)\n","            pressure = pressure.cpu()\n","            pressure = np.array(pressure)\n","            pressure = pressure.reshape(3586)\n","            np.save(os.path.join(\"/content/outputs\",\n","                       f\"press_{number}.npy\"), pressure)\n","print(\"Done!\")\n","\n","\"\"\"输出预测风速\"\"\"\n","setup_seed(32)\n","dataset1_path = \"/content/Test/Dataset_1/Feature_File\"\n","device = torch.device('cuda')\n","model = FlowFieldPointNet_2(character=3).to(device)\n","model.load_state_dict(torch.load('/content/FlowField_velocity_final_model.pth', weights_only=True))\n","model.eval()\n","with torch.no_grad():\n","    for file in os.listdir(dataset1_path):\n","        if file[0:3] == \"vel\":\n","            number = int(file[4:7])\n","            data = os.path.join(dataset1_path, file)\n","            _, polydata = read_vtk(data)\n","            points = nodes(polydata)\n","            points = torch.tensor(points, dtype=torch.float32).to(device)\n","            points = points.unsqueeze(0)\n","\n","            velocity, _, _ = model(points)\n","            velocity = velocity.reshape(29498, 3)\n","            velocity = velocity.cpu()\n","            np.save(os.path.join(\"/content/outputs\", f\"vel_{number}.npy\"),\n","                    np.array(velocity))\n","print(\"Done!\")\n","\n","\"\"\"输出预测风速\"\"\"\n","setup_seed(32)\n","config = {\n","    'k': 40,\n","    'train_cd': True,\n","}\n","dataset2_path = \"/content/Test/Dataset_2/Feature_File\"\n","device = torch.device('cuda')\n","model = AeroDGCNN(config).to(device)\n","model.load_state_dict(torch.load('/content/AeroDGCNN_cd_final_model.pth', weights_only=True))\n","model.eval()\n","cd_list = []\n","dataset2_index_path = \"/content/dataset2_train_label.csv\"\n","d2_inf = {}\n","for i in range(501, 551):\n","    d2_index_inf = np.loadtxt(dataset2_index_path, delimiter=\",\", dtype=str, encoding='utf-8')[:, 0][i].astype(np.int16)\n","    d2_name_inf = np.loadtxt(dataset2_index_path, delimiter=\",\", dtype=str, encoding='utf-8')[:, 1][i]\n","    d2_cd_inf = np.loadtxt(dataset2_index_path, delimiter=\",\", dtype=str, encoding='utf-8')[:, 2][i].astype(np.float32)\n","    d2_inf[d2_index_inf] = [d2_name_inf, d2_cd_inf]\n","\n","with torch.no_grad():\n","    for i in range(50):\n","        file_name = d2_inf[i + 500][0] + '.obj'\n","        data = os.path.join(dataset2_path, file_name)\n","        mesh = o3d.io.read_triangle_mesh(data)\n","        pcd = mesh.sample_points_uniformly(number_of_points=5000)\n","        pcd = np.asarray(pcd.points, dtype=np.float32)\n","        points = torch.tensor(pcd, dtype=torch.float32).to(device)\n","        points = points.unsqueeze(0)\n","        points = points.permute(0, 2, 1)\n","\n","        cd = model(points)\n","        cd = cd.reshape(1)\n","        cd = cd.cpu().item()\n","        cd_list.append([i, cd])\n","header = \",Cd\"\n","np.savetxt(f'/content/outputs/Answer.csv', cd_list, fmt=['%d', '%f'],\n","           delimiter=\",\", header=header, comments='')"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"ZVtScdFIWy-C","executionInfo":{"status":"ok","timestamp":1726140080912,"user_tz":-480,"elapsed":12213,"user":{"displayName":"王宇哲","userId":"05854028536713312921"}},"outputId":"4263c484-7a6d-4a02-c602-5cc0279336ca"},"execution_count":15,"outputs":[{"output_type":"stream","name":"stdout","text":["Done!\n","Done!\n"]}]},{"cell_type":"markdown","source":["# 结果保存\n","（结果在此模块下压缩成submission.zip，提交结果不可以通过外部链接下载）"],"metadata":{"id":"aG-_DIePWx0w"}},{"cell_type":"code","source":["os.system(f\"zip -r -j ./submission.zip /content/outputs\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"VxLWpC1NWilc","executionInfo":{"status":"ok","timestamp":1726140163801,"user_tz":-480,"elapsed":1353,"user":{"displayName":"王宇哲","userId":"05854028536713312921"}},"outputId":"da344668-8b67-47ba-b69d-fc9239cc5b4b"},"execution_count":16,"outputs":[{"output_type":"execute_result","data":{"text/plain":["0"]},"metadata":{},"execution_count":16}]}]}